java~lambda表示式讓查詢更優雅
阿新 • • 發佈:2018-12-30
在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也有支援!
參考資料: