11. lambda表達(dá)式
- lambda表達(dá)式本質(zhì)上是一組匿名方法比如
public int add(int x, int y) {
return x + y;
}
//可以表示為
(int x, int y) -> x + y;
//或(虛擬機(jī)可以推斷出類型)
(x, y) -> x + y
//或
(x, y) -> { return x + y; }
- obviously,lambda表達(dá)式由三部分組成:參數(shù)列表叼架、箭頭畔裕、一個(gè)表達(dá)式。
- 當(dāng)這個(gè)方法沒有參數(shù)也沒有返回值的時(shí)候乖订,可以表示成
//例如Runnable的run方法實(shí)現(xiàn)
new Thread(()->{System.out.println("hello");}).start();
//如果只有一個(gè)參數(shù)扮饶,虛擬機(jī)可以推斷出類型
c->{return c.length();}
- 要接收lambda表達(dá)式結(jié)果,必須經(jīng)過顯示轉(zhuǎn)換乍构,例如
//報(bào)錯(cuò)L鹞蕖!哥遮!
Object obj = () -> {System.out.println("hi");};
//編譯通過
Object o = (Runnable) () -> {System.out.println("hi"); };
// 外部迭代
for(Object o: list) {
System.out.println(o);
}
//改為forEach函數(shù)實(shí)現(xiàn)內(nèi)部迭代
list.forEach(o -> {System.out.println(o);});
- 使用Stream類進(jìn)行流處理:第一步,創(chuàng)建Stream眠饮。第二步奥帘,轉(zhuǎn)換Stream。第三步仪召,聚合Stream翩概。
List<String> list = new ArrayList<>();
list.add("1");
list.add("12");
list.add("123");
list.stream()//創(chuàng)建一個(gè)流
.filter(e->e.length()==3)//轉(zhuǎn)換,過濾出條件為true的元素
.forEach(e->System.out.println(e));//聚合返咱,對(duì)過濾后的流進(jìn)行內(nèi)部迭代
//結(jié)果為123