是一種程式設計模型,把計算機中的運算看做數學中的函式計算,並且避免了狀態及變數的概念 f(x)
第一種:就是在乙個介面中定義唯一的乙個抽象方法,那麼這個介面就是函式式介面
public inte***ce functioninte***cedemo
第二種:通過註解的方式@functionalinte***ce宣告,加註解相當於加了乙個強制性的約束
@functionalinte***ce
public inte***ce functioninte***cedemo
函式式介面裡面也可以有實現方法,好處是修改介面後不需要改實現,使得介面在發布之後仍然可以公升級
@functionalinte***ce
public inte***ce functioninte***cedemo
default void doanything()
}
public class main
};fi.sayhello();
fi.doanything();
functioninte***cedemo.sayhi();
}}
重寫父類的方法不違背函式式介面的定義
例如重寫equals或tostring
@functionalinte***ce
public inte***ce functioninte***cedemo
default void doanything()
boolean equals(object object);
}
語法組成:
1. 乙個括號內用逗號分隔的形式引數,引數是
函式式介面裡面的方法引數
2. 乙個箭頭號 ->
3. 方法體或者**塊
(parameters) -> expression
public class maindemo2
}).start();
//lambda簡化後
new thread(()->).start();
//lambda繼續簡化,整個**塊只有一行**,而這一行**就是表示式的返回值的話就可以省略**塊
new thread(()-> system.out.println("i am thread test3")).start();
}}
public class maindemo3
// });
//lambda表示式實現
// words.sort((string o1,string o2) -> );
//繼續優化
words.sort((o1,o2) ->o2.compareto(o1));
for (string word: words)
}}
lambda表示式能夠簡化**一方面是如上的函式式介面,另一方面是方法的引用
方法引用
1. 引用靜態方法 string::valueof
2. 引用物件的例項方法 x::tostring
3.引用某個型別的任意物件的例項方法 string::tostring
4.引用類建構函式 string::new
public class personinfo implements comparable
public void setname(string name)
@override
public int compareto(personinfo o)
public int compare(personinfo p1 , personinfo p2)
}
/**
* created by xingyuchao on 2018/1/19.
* 工廠方法,將personinfo包裝成函式式介面的方式
*/public class personinfofactory
public personinfo getperson()
}
public class maindemo4
});print(personinfolist);
//引用物件的例項方法 x::tostring
//引用某個型別的任意物件的例項方法 string::tostring
//引用靜態方法 string::valueof
personinfolist.sort(maindemo4::mycompare);
print(personinfolist);
}public static void print(listpersoninfos)
private static int mycompare(personinfo p1 , personinfo p2)
}
根據返回結果:分為中間操作和最終操作(flume風格 鏈式操作)
根據併發性區分: 序列和並行操作
stream.sequential()
stream.parallel()
中間操作
filter過濾器
sorted 排序
distinct
substream 獲取子流
終止操作
foreach
findfirst
public class person
public string getname()
public void setname(string name)
public int getage()
public void setage(int age)
@override
public string tostring() ';
}}
public class maindemo5
};public static void main(string args) );
// 過濾小於24歲的
person.stream().filter(person -> person.getage()>24).foreach( person -> system.out.println(person.tostring()));
}}
java8函式式程式設計(二)
list常用操作 private static list init 迴圈列印集合中每個元素 private static void foreach private static void tolist 計算集合中age 4的元素個數 private static void filter 篩選出顏色為...
初探java8函式式程式設計
lambda引用的是值,不是變數,所以,lambda中引用變數,必須是final變數或者既成事實上的final變數 collect tolist 方法由stream 裡的值生成乙個列表,是乙個及早求值操作 listcollected stream.of a b c collect collector...
java 8 函式式程式設計實戰
函式一二三等值的區分 只要某個值滿足以下三個條件,就能被稱為一等值。可以作為引數傳遞給函式 可以作為函式返回值 可以被賦值給變數 所以數字 字串等常用的值都是一等的。如果僅滿足第一條,而不能作為函式返回值或被賦值給變數,就稱為二等的 second class 假如三條都不滿足,則稱為三等的 thir...