JDK8的新特性
JDK8的新特性
這兩天開始看jdk8的新特性,先看了Lembda表達式和Stream,就一個感覺,優雅。
趕緊將這兩天的成果總結一下
一、Lembda表達式
Lembda表達式格式
lembda表達式是一個簡潔、可傳遞的匿名函數,實現了把代碼塊賦值給一個變量的功能
格式就是 (parameters) -> expression ,需要注意的是:
函數式接口
lambda表達式的使用需要借助于函數式接口
含有且僅含有一個抽象方法的接口被稱為函數式接口
需要注意的是,default關鍵字可以在接口中定義實現,如果一個接口含有多個實現但是只有一個抽象方法,那么它也屬于函數式接口
自定義函數式接口
一般用@FunctionInterface對函數式接口來進行語義化標注
步驟:
結果: result = 3
JDK自帶的函數式接口
進行判斷
boolean test(T t);
利用我們在外部設定的條件對于傳入的參數進行校驗并返回驗證通過與否
消費者 void accept(T t);
接收參數并依據傳遞的行為應用傳遞的參數值
R apoly(T t);
執行轉換操作,輸入類型 T 的數據,返回 R 類型的結果
這三個是最重要的接口,其他的接口都是從這三個接口演化而來,下面我強行使用這三個接口
/*Predicate<T> 判斷*/Predicate<String> stringPredicate = str -> StringUtils.isBlank(str) || "error".equalsIgnoreCase(str);/*Consumer<T>*/Consumer<String> stringConsumer = str -> {if (StringUtils.isBlank(str) || "error".equalsIgnoreCase(str)) {System.out.println("Consumer失敗");}};/*Function<T,R>*/Function<String, String> stringStringFunction = str -> {if (StringUtils.isBlank(str) || "error".equalsIgnoreCase(str)) {return "Function失敗";} else {return "Function成功";}};String in = "error";if (stringPredicate.test(in)) {System.out.println("Predicate失敗");}stringConsumer.accept(in);System.out.println(stringStringFunction.apply(in));方法引用
在表達式中,可以使用::更方便的調用方法,它會自動將參數傳入,并且將返回值返回
比如
System.out.println(傳入參數)可以轉換為System.out::println
表達式只需要調用一個方法就可以完成功能的時候,可以用這種方法來進一步簡化代碼;
總結
- 上一篇: Android 引用第三方开源库,出现冲
- 下一篇: 第二个脚本语句