1. 程式人生 > >java~lambda表示式讓查詢更優雅

java~lambda表示式讓查詢更優雅

在java之前的版本里,如果希望從集合時查詢符合條件的資料,如果先遍歷他,這種寫法是我們不能接受的,所以現在java有了lambda就很好的解決了這個問題,讓程式碼更優雅一些!

  /**
   * lambda filter.
   * @param list
   * @param predicate
   * @return
   */
  public List<User> conditionFilter(List<User> list, Predicate<User> predicate){
    return list.stream().filter(predicate).collect(Collectors.toList());
  }

上面的方法裡有個predicate委託,他類似C++裡的函式指標,和C#裡的委託類似,他允許外面將一個表示式傳進來,與現有程式碼很好的結偶了!

 /**
   * find list.
   */
  public void findList() {
    List<User> list = new ArrayList<>();
    list.add(new User("zzl"));
    list.add(new User("abc"));
    list.add(new User("bca"));
    list = conditionFilter(list, exe -> exe.getName() == "zzl");
    
for (User user : list ) { System.out.println(user.getName()); } }

上面程式碼在集合裡查找了名字為zzl的記錄!

下面讓委託實現了不等於的查詢!

 /**
   * lambda filter not.
   *
   * @param subjects
   * @param predicate
   * @return
   */
  private List<User> conditionFilterNot(List<User> subjects, Predicate<User> predicate) {

    
return subjects.stream().filter(predicate.negate()).collect(Collectors.toList()); }

事實上,java裡的Predicate介面還有很多用法,想and,or也有支援!

參考資料: