【Lambda】Lambda表達式

基本語法:

  (parameters) -> expression  或  (parameters) ->{ statements;}

String[] atp = {"Rafael Nadal", "Novak Djokovic",  
       "Stanislas Wawrinka",  
       "David Ferrer","Roger Federer",  
       "Andy Murray","Tomas Berdych",  
       "Juan Martin Del Potro"};  
List<String> players =  Arrays.asList(atp);  
  
// 以前的循環方式  
for (String player : players) {  
     System.out.print(player + "; ");  
}  
  
// 使用 lambda 表達式以及函數操作(functional operation)  
players.forEach((player) -> System.out.print(player + "; "));  
   
// 在 Java 8 中使用雙冒號操作符(double colon operator)  
players.forEach(System.out::println);

使用Lambdas排序集合

Comparator<String> sortByName = (String s1, String s2) -> (s1.compareTo(s2)); 

Arrays.sort(players, sortByName);

Arrays.sort(players, (String s1, String s2) -> (s1.compareTo(s2)));

使用Lambdas和Streams
Stream是對集合的包裝,通常和lambda一起使用。 使用lambdas可以支持許多操作,如 map, filter, limit, sorted, count, min, max, sum, collect 等等。 同樣,Stream使用懶運算,他們並不會真正地讀取所有數據,遇到像getFirst() 這樣的方法就會結束鏈式語法。

Predicate<Person> ageFilter = (p) -> (p.getAge() > 25);  
Predicate<Person> salaryFilter = (p) -> (p.getSalary() > 1400);  
Predicate<Person> genderFilter = (p) -> ("female".equals(p.getGender()));  
  
System.out.println("下面是年齡大於 24歲且月薪在$1,400以上的女PHP程序員:");  
phpProgrammers.stream()  
          .filter(ageFilter)  
          .filter(salaryFilter)  
          .filter(genderFilter)  
          .forEach((p) -> System.out.printf("%s %s; ", p.getFirstName(), p.getLastName()));

我們可以使用summaryStatistics方法獲得stream 中元素的各種彙總數據。 接下來,我們可以訪問這些方法,比如getMax, getMin, getSum或getAverage:

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);  
IntSummaryStatistics stats = numbers  
          .stream()  
          .mapToInt((x) -> x)  
          .summaryStatistics();  
  
System.out.println("List中最大的數字 : " + stats.getMax());  
System.out.println("List中最小的數字 : " + stats.getMin());  
System.out.println("所有數字的總和   : " + stats.getSum());  
System.out.println("所有數字的平均值 : " + stats.getAverage()); 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章