Lambda表達式可以理解為:簡寫的函數(shù)式接口的實現(xiàn)斗这。
對于“函數(shù)式接口”的簡化寫法(和其他特性結合構成更加簡潔的代碼結構)
函數(shù)式接口:接口中只有一個抽象方法(可以有默認方法和靜態(tài)方法)佑淀,為了保障只有一個抽象方法绍坝,可以在接口上添加@FunctionalInterface注解
1.語法
(參數(shù))->{
實現(xiàn)方法的方法體 ;
}
注:參數(shù)和方法體只有一個(一條一句)時,()和{}可以省略。
2.用法
- 配合集合的.forEach()方法進行遍歷,例如:list.forEach(p->syso(p));
還可以再進行簡化list.forEach(system.out::println);(解釋下這里每次遍歷只有一個值所以參 數(shù)不用寫啦芥映,方法前用::標識)
- 代替匿名內部類(前提是接口為“函數(shù)式接口”)洲尊,如創(chuàng)建線程:new Thread(()->syso()).start();
再如排序:list.sort((o1,o2)-> return o1.param()-o2.param());
-
Stream是對集合的包裝,通常和lambda一起使用。 使用lambdas可以支持許多操作,如 map, filter, limit, sorted, count, min, max, sum, collect 等等
filter():過濾數(shù)據奈偏,例如:list.stream().filter(p->(p>10)).forEach();(注意后面的lambda體這次試用()括起來的而不是{})
collect():將stream轉成集合坞嘀,例如:list.stream().filter(p->(p>4)).collect(Collectors.toList()/toSet());
distinct():排除相同的元素
limit():取前幾條 limit(3)
skip():拋棄前幾個
map():接受一個方法做參數(shù),這個方法會作用在每個元素身上惊来,并將其映射成一個新的函數(shù)丽涩,例如:list.stream().map(Person::getAge).map(String::length).map(s->s.split()).forEach(...);
flatMap():和map有點區(qū)別,他能讓我們操作到類似List<List<?>>這種結構中的內層容器的元素裁蚁。流的扁平化如List<List<String>>這種結構矢渊,list.stream().flatMap(list->list.stream())
如果對你有幫助的話,可以點個喜歡加個關注哦枉证,謝謝矮男。
(如果哪里寫的不對,還請大佬不吝賜教)