函數(shù)式編程(Functional Programming)是把函數(shù)作為基本運(yùn)算單元,函數(shù)可以作為變量,可以接收函數(shù),還可以返回函數(shù)。歷史上研究函數(shù)式編程的理論是Lambda演算,所以我們經(jīng)常把支持函數(shù)式編程的編碼風(fēng)格稱為L(zhǎng)ambda表達(dá)式。
在Java中使用Lambda表達(dá)式的前提:需要是函數(shù)接口。
函數(shù)接口
接口中只存在一個(gè)需要被實(shí)現(xiàn)的抽象方法。
注:即便該接口中存在默認(rèn)方法與靜態(tài)方法,與Object中也存在的抽象方法(如equal等),畢竟所有實(shí)現(xiàn)的子類肯定繼承自O(shè)bject,只要只存在一個(gè)需要被實(shí)現(xiàn)的方法就算函數(shù)接口。
附:JDK1.8新特性:接口中可以存在默認(rèn)實(shí)現(xiàn)的方法(default修飾)與靜態(tài)方法(必須有方法體)。
下面的接口也屬于函數(shù)接口:
package interfaces;
@FunctionalInterface
public interface MyInterface {
/*
* JDK1.8 新特性:接口中可以存在默認(rèn)實(shí)現(xiàn)的方法(default修飾)與靜態(tài)方法(必須有方法體)。
*
*/
// 唯一要手動(dòng)實(shí)現(xiàn)的方法
int compare(int a, int b);
// Object的方法,畢竟實(shí)現(xiàn)類都是Object的子類,都已經(jīng)默認(rèn)實(shí)現(xiàn)了equals方法
boolean equals(Object obj);
// Object的方法,畢竟實(shí)現(xiàn)類都是Object的子類,都已經(jīng)默認(rèn)實(shí)現(xiàn)了toString方法
String toString();
public static void a(){
System.out.println("我是接口中的靜態(tài)方法a");
}
public static void b(){
System.out.println("我是接口中的靜態(tài)方法b");
}
default void c(){
System.out.printf("我是接口中的默認(rèn)方法c");
}
default void d(){
System.out.printf("我是接口中的默認(rèn)方法d");
}
}
Lambda表達(dá)式書(shū)寫(xiě)
多個(gè)形參
參數(shù)類型可以省略,如果沒(méi)有形參,小括號(hào)也可以省略
(s1, s2) -> {
return s1.compareTo(s2);
}
只有一行代碼(可省略return與括號(hào))
(s1, s2) -> s1.compareTo(s2)
方法引用
方法引用也是java8的新特性之一, 可以直接引用已有Java類或?qū)ο蟮姆椒ɑ驑?gòu)造器。方法引用與lambda表達(dá)式結(jié)合使用,可以進(jìn)一步簡(jiǎn)化代碼。簡(jiǎn)化前提:方法引用,是指如果某個(gè)方法簽名和接口恰好一致,就可以直接傳入方法引用。
附:除了方法名外,方法參數(shù)一致,返回類型相同,因此,我們說(shuō)兩者的方法簽名一致,可以直接把方法名作為L(zhǎng)ambda表達(dá)式傳入。
使用前提文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-815847.html
- 引用處必須是函數(shù)式接口
- 被引用的方法必須已經(jīng)存在
- 被引用方法的形參和返回值必須和抽象方法保持一致
- 被引用方法的功能要滿足當(dāng)前需求
常見(jiàn)函數(shù)接口文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-815847.html
- 接收一個(gè)任意類型參數(shù),返回一個(gè)任意類型參數(shù)。
java.util.function Interface Function<T,R>
- 接收一個(gè)任意類型參數(shù),不返回參數(shù)。
java.util.function Interface Consumer<T>
- 不接收任何參數(shù),返回一個(gè)任意類型參數(shù)。
java.util.function Interface Supplier<T>
- 接收一個(gè)任意類型參數(shù),返回一個(gè)布爾類型參數(shù)。
java.util.function Interface Predicate<T>
到了這里,關(guān)于Java 8 新特性之Lambda表達(dá)式的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!