技術(shù)總結(jié) | Java 8 新特性 Lambda表達(dá)式及流使用總結(jié)

Lambda 表達(dá)式

  1. Lambda 表達(dá)式語法

Lambda 表達(dá)式語法包含三個部分:

  • 參數(shù)列表:函數(shù)的入?yún)ⅰ?/li>
  • 箭頭:把參數(shù)列表和 Lambda 主體分開。
  • Lambda 主體:函數(shù)主要實現(xiàn)的功能
(String s1,String s2) -> s1.length().compareTo(s2.length());

其中,(String s1,String s2)為參數(shù)列表,s1.length().compareTo(s2.length());為Lambda主體。

Lambda 表達(dá)式的基本語法:

(parameters) -> expression
// 或者(請注意花括號)
(parameters) -> {statements;}
  1. Lambdas及函數(shù)式接口的例子
使用案例 Lambdas例子 對應(yīng)的函數(shù)式接口
boolean 表達(dá)式 List<String> list -> list.isEmpty() Predicate<List<String>>
創(chuàng)建對象 () -> new Apple(10) Supplier<Apple>
消費對象 (Apple a) -> System.out.println(a.getWeight()) Consumer<Apple>
從一個對象中提取 (String s) -> s.length() Function<String,Integer>或<ToIntFunction<String>
  1. 方法引用
    Lambda 及其等效方法方法引用示例
Lambda 等效引用方法
(Apple a) -> a.getWeight() Apple::getWeight
() -> Thread.currentThread().dumpStack Thread.currentThread::dumpStack
(String s) -> System.out.println(s) System.out::println

Java8 引入流

  1. 流是什么

流是Java API的新成員,它允許你以聲明的方式處理數(shù)據(jù)集合。可以把它們看作是遍歷數(shù)據(jù)集的高級迭代器。

流使用樣例:

List<String> names = menu.stream()
                         .filter(d -> d.getCalories() > 300)
                         .map(Dish::getName)
                         .limit(3)
                         .collect(toList());

該表達(dá)式的含義:過濾卡路里大于 300 的三盤菜

  1. 如何使用流
    流的使用一般包含三件事
  • 一個數(shù)據(jù)源。
  • 中間操作,形成一個流的流水線
  • 一個終端,生成結(jié)果。
  1. 流的中間操作
操作 類型 返回類型 操作函數(shù) 函數(shù)描述符
filter 中間 Stream<T> Predicate<T> T -> boolean
map 中間 Stram<T> Function<T,R> T -> R
limit 中間 Stream<T>
sort 中間 Steam<T> Comparator<T> (T,T) -> int
distinct 中間 Steam<T>
  1. 流的終端操作
操作 類型 目的
forEach 終端 消費流中的每一個元素并對其應(yīng)用 Lambda,該操作返回 void
count 終端 返回流中的個數(shù),該操作返回 long
collect 終端 把流歸約成一個集合,如 List、Map甚至是 Integer
  1. map使用

返回集合中每個字段的長度:

List<String> words = Arrays.asList("Hello","Word","Java 8","Lambdas","Actions");
List<Integer> wordLengths = words.stream().map(String::length).collect(Collectors.toList());
  1. 匹配
    數(shù)據(jù)是否匹配條件
// 是否都匹配
boolean isHealthy =  menu.stream().allMatch(d -> d.getCalories <1000);
// 確保沒有匹配
boolean isHealthy = menu.stream().noneMatch(d -> d.getCalories>=1000);
  1. 計數(shù)
long count = list.stream().filter(s -> s.equals("A")).count();
  1. 取交集
List<String> updateData = param.stram().filter(all::contains).collect(Collectors.toList());

其中,all:["aaa","bbb", "ccc", "ddd", "eee"] ,param:["aaa", "ccc", "fff"]

  1. 取param的非交集
  List<String> add = param.stream().filter(s ->!all.contains(s)).collect(Collectors.toList());
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容