一個(gè)高階函數(shù)是指 一個(gè)函數(shù)使用函數(shù)作為參數(shù)或者執(zhí)行完返回函數(shù)。在高階函數(shù)教程中我將列舉幾個(gè) Java 高階函數(shù)的例子。
集合排序
高階函數(shù)的第一個(gè)例子是使用 Comparator
作為參數(shù)的 Collections.sort()
方法,例子如下:
List<String> list = new ArrayList<>();
list.add("One");
list.add("Abc");
list.add("BCD");
Collections.sort(list, (String a, String b) -> {
return a.compareTo(b);
});
System.out.println(list);
Collections.sort()
方法有兩個(gè)參數(shù),第一個(gè)參數(shù)是一個(gè) list
,第二個(gè)參數(shù)是一個(gè) lambda (函數(shù)),就是 這個(gè) lambda 參數(shù)使得 Collections.sort()
成為一個(gè)高階函數(shù)。
倒序排序
下面是另一個(gè)高階函數(shù)的例子,這次這個(gè)函數(shù)是返回另外一個(gè)函數(shù)作為結(jié)果:
Comparator<String> comparator = (String a, String b) -> {
return a.compareTo(b);
};
Comparator<String> comparatorReversed = comparator.reversed();
Collections.sort(list, comparatorReversed);
System.out.println(list);
這個(gè)例子首先創(chuàng)建了一個(gè)實(shí)現(xiàn) Comparator
接口的 lambda 表達(dá)式。
其次,這個(gè)例子調(diào)用了 reversed()
方法返回一個(gè)新的 Comparator
lambda,它可以反轉(zhuǎn)第一個(gè) Comparator
接口實(shí)現(xiàn)產(chǎn)生的結(jié)果。這里的 “反轉(zhuǎn)” 是指它簡單的返回 -1 * comparator.compare(a,b)
。
因?yàn)?reversed()
返回一個(gè) lambda (函數(shù)),所以它可以被認(rèn)為是一個(gè) 高階函數(shù)。
第三,這個(gè)例子使用了 Collections.sort()
方法對(duì)一個(gè)字符串 list
進(jìn)行排序。
議自:https://jenkov.com/tutorials/java-functional-programming/higher-order-functions.html