新聞中心
這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
JavaJDK1.8新特性lambda表達式與方法引用-創(chuàng)新互聯(lián)
Lambda表達式標準格式
分享文章:JavaJDK1.8新特性lambda表達式與方法引用-創(chuàng)新互聯(lián)
網(wǎng)站鏈接:http://ef60e0e.cn/article/ceidii.html
(參數(shù)列表) ->{方法體
}
Lambda表達式省略格式(int arg) ->{return new Object();
}
// 省略規(guī)則
// 規(guī)則 1 小括號內(nèi)參數(shù)的類型可以省略
(arg) ->{return new Object();
}
// 規(guī)則 2 如果小括號內(nèi)有且僅有一個參數(shù),則小括號可以省略
arg ->{return new Object();
}
// 規(guī)則 3 如果大括號內(nèi)有且僅有一個語句,可以同時省略大括號,return關(guān)鍵字,語句分號
arg ->new Object()
Lambda表達式前提條件- 方法的參數(shù)或變量的類型是接口
- 接口中只能有一個抽象方法
當我們在表達式中調(diào)用外部的函數(shù)時,那我們的表達式就會顯得非常多余,這時我們就可以通過方式二的寫法,也就是方法引用,更進一步的優(yōu)化lambda表達式
// 方式一
public class LambdaIntro {public static void getMaxNum(int[] arr) {System.out.println(Arrays.stream(arr).max().getAsInt());
}
public static void main(String[] args) {printMax((int[] arr) ->{getMaxNum(arr);
});
}
public static void printMax(Consumerconsumer){int[] arr = {1, 3, 4, 5};
consumer.accept(arr);
}
}
// 方式二
public static void main(String[] args) {printMax(LambdaIntro::getMaxNum);
}
方法引用的語法// 對象::實例方法 為了方便觀看,以下lambda均未簡化
// 注意事項: 被引用的方法,參數(shù)與返回值要和接口中抽象方法的參數(shù)一樣
public class LambdaIntro {public static void main(String[] args) {// 冗余寫法
Date date = new Date();
Suppliersupplier = () ->{return date.getTime();
};
System.out.println(supplier.get());
// 方法引用
Suppliersupplier1 = date::getTime;
System.out.println(supplier1.get());
}
}
// 類名::靜態(tài)方法
public class LambdaIntro {public static void main(String[] args) {// 冗余寫法
Suppliersupplier = () ->{return System.currentTimeMillis();
};
System.out.println(supplier.get());
// 方法引用
Suppliersupplier1 = System::currentTimeMillis;
System.out.println(supplier1.get());
}
}
// 類名::實例方法
// 注意事項: 實例方法會將第一個參數(shù)作為方法的調(diào)用者
public class LambdaIntro {public static void main(String[] args) {// 冗余寫法
Functionfunction1 = (String str) ->{ return str.length();
};
System.out.println(function1.apply("zhangdy"));
// 方法引用
Functionfunction2 = String::length;
System.out.println(function2.apply("zhangdy"));
}
}
// 類名::new調(diào)用的構(gòu)造器
@Data
@NoArgsConstructor
@AllArgsConstructor
class Person {private String name;
private Integer age;
}
public class LambdaIntro {public static void main(String[] args) {// 冗余寫法
Suppliersupplier = () ->{return new Person();
};
BiFunctionfunction = (String name, Integer age) ->{return new Person(name, age);
};
System.out.println(supplier.get());
System.out.println(function.apply("zhangdy", 23));
// 方法引用
Suppliersupplier2 = Person::new;
BiFunctionfunction2 = Person::new;
System.out.println(supplier2.get());
System.out.println(function2.apply("zhangdy", 23));
}
}
// 常用數(shù)據(jù)類型[]::new 調(diào)用數(shù)組的構(gòu)造器
public class LambdaIntro {public static void main(String[] args) {// 冗余寫法
Functionfunction = (Integer len) ->{return new String[len];
};
String[] apply = function.apply(10);
System.out.println(apply.length);
// 方法引用
Functionfunction2 = String[]::new;
String[] apply1 = function2.apply(10);
System.out.println(apply1.length);
}
}
你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
分享文章:JavaJDK1.8新特性lambda表達式與方法引用-創(chuàng)新互聯(lián)
網(wǎng)站鏈接:http://ef60e0e.cn/article/ceidii.html