java 基础包的功能_Java 8的功能基础
java 基礎包的功能
Java 8徹底改變了Java。 它很可能是過去10年中最重要的Java版本。 有很多新功能,包括默認方法,方法和構造函數引用以及lambda, 僅舉幾例 。
更有趣的功能之一是新的java.util.stream API,正如Javadoc所述,該API支持
元素流上的函數式操作,例如集合上的map-reduce轉換
將此新API與lambda表達式結合使用,您將獲得簡潔而強大的語法,該語法可通過應用投影顯著簡化代碼。
以表面上簡單的過濾集合為例。 在這種情況下,將創建一個簡單的Message類型Collection ,如下所示:
創建消息集合
List<Message> messages = new ArrayList<>(); messages.add(new Message("aglover", "foo", 56854)); messages.add(new Message("aglover", "foo", 85)); messages.add(new Message("aglover", "bar", 9999)); messages.add(new Message("rsmith", "foo", 4564));在此集合中,我想過濾出Message ,其delay (第3個構造函數參數)大于3,000秒。
在Java 8之前 ,您可以像這樣手動阻塞這種邏輯:
過濾舊派風格
for (Message message : messages) {if (message.delay > 3000) {System.out.println(message);} }但是,在Java 8中,此工作變得更加簡潔。 集合現在支持stream方法,該方法將基礎數據結構轉換為可迭代的對象流,從而允許使用lambda表達式的新型功能操作。 這些操作大多數也可以鏈接在一起。 這些可鏈接的方法稱為“ 中間” ,不能鏈接的方法稱為“ 終端” 。
簡而言之,lambda表達式與匿名類非常相似,只是語法更少 。 例如,如果您查看Javadocs中Stream的filter方法的參數,您將看到它采用了Predicate類型。 但是,您不必像在使用匿名類的Java 8之前那樣實現該接口。 因此,用于過濾所有大于3000的delay值的Predicate lambda表達式為:
Lambda表達式
x -> x.delay > 3000其中x是為流中的每個值傳遞的參數, ->右邊的所有內容都是要計算的表達式。
將所有這些放到Java 8中可以得出:
流lambdas!
messages.stream().filter(m -> m.delay > 3000).forEach(item -> System.out.println(item));有趣的是,由于Java 8的其他一些新功能, forEach的lambda可以進一步簡化為:
流lambda更短!
messages.stream().filter(m -> m.delay > 3000).forEach(System.out::println);由于forEach lambda的參數僅由println ,因此Java 8現在允許您完全刪除該參數。
之前,我提到過流允許您鏈接lambda-在上述情況下, filter方法是一種中間方法,而forEach是一種終端方法。 功能程序員可以立即識別的其他中間方法是: map , flatMap和reduce ,僅舉幾例。
詳細地說,我想查找所有延遲超過3,000秒的Message ,并總結總延遲時間。 沒有功能魔術,我可以寫:
Prosaic Java
long totalWaitTime = 0; for (Message message : messages) {if (message.delay > 3000) {totalWaitTime += message.delay;} }盡管如此,使用Java 8和一些function-foo,您可以實現更優雅的代碼構造,如下所示:
Java 8優雅
long totWaitTime = messages.stream().filter(m -> m.delay > 3000).mapToLong(m -> m.delay).sum();請注意,我如何鏈接filter和mapToLong方法以及終端sum 。 順便說一句, sum方法需要一種特定的地圖樣式方法,該方法可以產生基本類型的集合,例如mapToLong , mapToInt等。
將功能樣式編程作為一種核心語言功能,是一種非常強大的結構。 并且,盡管許多技術已在各種第三方庫(如Guava)和JVM語言(如Scala和Groovy)中提供,但擁有這些語言核心的功能肯定會吸引更多的開發人員,并對開發前景產生最大的影響。
毫無疑問,Java 8極大地改變了Java語言 。
翻譯自: https://www.javacodegeeks.com/2014/03/java-8s-functional-fomentation.html
java 基礎包的功能
總結
以上是生活随笔為你收集整理的java 基础包的功能_Java 8的功能基础的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电脑显示怎么设置全屏显示(电脑显示怎么设
- 下一篇: 照日出参数怎么设置(日出单反参数设置)