數學建模-灰色關聯分析
阿新 • • 發佈:2022-05-09
Lambda表示式
Java8引入函數語言程式設計風格,可以理解為一種匿名函式的替代,通過行為引數化傳遞程式碼
形式
(parameters)-> expression
(parameters)->{ statement;}
// 例子
() -> System.out.print(1);
name->System.out.print(name);
() -> {
System.out.print(1);
System.out.print(2);
}
(x,y)->x + y;
(Long x,Long y)-> x + y;
函式式介面
- 介面中(必須)只有一個抽象方法
- Java8函式式介面註解@FunctionInterface (只是幫助編譯器校驗介面中是否只有一個抽象方法。不一定要有)
- 函式式介面的抽象方法的簽名基本上就是Lambda表示式的簽名,我們將這種抽象方法稱之為函式描述符
常用函式式介面
介面 | 引數 | 返回型別 | 描述 |
---|---|---|---|
Predicate |
T | boolean | 用來判別一個物件 |
Consumer |
T | void | 接收一個物件處理不返回值 |
Function<T,R> | T | R | 接收一個物件返回一個物件 |
Supplier |
none | T | 提供一個物件 |
UnaryOperator |
T | T | 接收一個物件返回相同物件 |
BiFunction<T, U, R> | (T,U) | R | 接收2個物件返回一個物件 |
BinaryOperator |
(T,T) | T | 接收2個相同物件返回相同物件 |
還有一些基礎型別的函式式介面 如IntFunction。。好處是不用裝箱拆箱,效能較好
方法引用
方法引用是呼叫特定方法的 Lambda 表示式的一種快速寫法,可以讓你重複使用現有方法定義,並像Lambda 表示式一樣傳遞
// 指向靜態方法的方法引用 (args) -> ClassName.staticMethod(args); ClassName::staticMethod; Consumer<String> a = (String s) -> Integer.parseInt(s); Consumer<String> b = Integer::parseInt; // 指向任意例項方法的方法引用 (args) -> args.instanceMethod(); ClassName::instanceMethod; Consumer<String> c = (String s) -> s.length(); Consumer<String> d = String::length; // 指向現有物件的例項方法引用 (args) -> object.instanceMethod(args); object::instanceMethod; StringBuilder stringBuilder = new StringBuilder(); Consumer<String> e = (String s) -> stringBuilder.append(s); Consumer<String> f = stringBuilder::append;