日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java 8的功能基础

發(fā)布時間:2023/12/3 java 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java 8的功能基础 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Java 8徹底改變了Java。 它很可能是過去10年中最重要的Java版本。 有很多新功能,包括默認方法,方法和構(gòu)造函數(shù)引用以及l(fā)ambda, 僅舉幾例 。

更有趣的功能之一是新的java.util.stream API,正如Javadoc所述,該API支持

元素流上的函數(shù)式操作,例如集合上的map-reduce轉(zhuǎn)換

將此新API與lambda表達式結(jié)合使用,您將獲得簡潔但功能強大的語法,該語法可通過應用投影顯著簡化代碼。

以表面上簡單的過濾集合為例。 在這種情況下,將創(chuàng)建一個簡單的Message類型Collection ,如下所示:

創(chuàng)建消息集合

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個構(gòu)造函數(shù)參數(shù))大于3,000秒。

在Java 8之前 ,您可以像這樣手動阻塞這種邏輯:

過濾舊派風格

for (Message message : messages) {if (message.delay > 3000) {System.out.println(message);} }

但是,在Java 8中,此工作變得更加簡潔。 集合現(xiàn)在支持stream方法,該方法將基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換為可迭代的對象流,從而允許使用lambda表達式的新型功能操作。 這些操作大多數(shù)也可以鏈接在一起。 這些可鏈接的方法稱為“ 中間” ,不能鏈接的方法稱為“ 終端” 。

簡而言之,lambda表達式與匿名類非常相似,只是語法更少 。 例如,如果您在Javadocs中查找Stream的filter方法的參數(shù),則會看到它采用了Predicate類型。 但是,您不必像在使用匿名類的Java 8之前那樣實現(xiàn)該接口。 因此,用于過濾所有大于3000的delay值的Predicate lambda表達式為:

Lambda表達式

x -> x.delay > 3000

其中, x是為流中的每個值傳遞的參數(shù), ->右邊的所有內(nèi)容都是要求值的表達式。

將所有這些放到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的參數(shù)僅由println ,所以Java 8現(xiàn)在允許您完全刪除該參數(shù)。

之前,我提到過流允許您鏈接lambda-在上述情況下, filter方法是一種中間方法,而forEach是一種終端方法。 功能程序員可以立即識別的其他中間方法是: map , flatMap和reduce ,僅舉幾例。

詳細地說,我想查找所有延遲超過3,000秒的Message ,并總結(jié)總延遲時間。 沒有功能魔術(shù),我可以寫:

普通的Java

long totalWaitTime = 0; for (Message message : messages) {if (message.delay > 3000) {totalWaitTime += message.delay;} }

不過,使用Java 8和一些function-foo,您可以實現(xiàn)更優(yōu)雅的代碼構(gòu)造,如下所示:

Java 8優(yōu)雅

long totWaitTime = messages.stream().filter(m -> m.delay > 3000).mapToLong(m -> m.delay).sum();

請注意,我如何鏈接filter和mapToLong方法以及終端sum 。 順便說一句, sum方法需要一種特定的地圖樣式方法,該方法可產(chǎn)生基本類型的集合,例如mapToLong , mapToInt等。

功能樣式編程作為一種核心語言功能,是一種非常強大的結(jié)構(gòu)。 而且,盡管許多技術(shù)在諸如Guava之類的各種第三方庫中以及諸如Scala和Groovy之類的JVM語言中已經(jīng)可用,但擁有這些語言核心的這些功能肯定會吸引更多的開發(fā)人員,并對開發(fā)前景產(chǎn)生最大的影響。

毫無疑問,Java 8極大地改變了Java語言 。

翻譯自: https://www.javacodegeeks.com/2014/03/java-8s-functional-fomentation.html

總結(jié)

以上是生活随笔為你收集整理的Java 8的功能基础的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。