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

歡迎訪問 生活随笔!

生活随笔

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

java

Java 9附加流

發布時間:2023/12/3 java 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java 9附加流 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Java 9即將發布! 它不僅僅是Jigsaw項目 。 (我也很驚訝。)它給平臺帶來了很多小的變化,我想一一看一下。 我將標記所有這些帖子,您可以在這里找到它們。

讓我們從…開始

Streams學習了兩個新技巧。 第一個處理前綴,流現在可以理解前綴。 我們可以使用謂詞來測試流的元素,從一開始就可以使用或刪除它們,直到第一個未通過測試為止。

流::同時

讓我們先來看一下take:

Stream<T> takeWhile(Predicate<? super T> predicate);

在有序流上調用它會返回一個新的流,該流包含通過謂詞的元素, 直到第一個失敗為止 。 它有點像過濾器,但是一旦第一個元素失敗了謂詞,它就會切斷流。 用它的話來說,它從流中獲取元素,而謂詞在不再存在時就保持并停止。

讓我們來看一個例子:

Stream.of("a", "b", "c", "", "e").takeWhile(s -> !String.isEmpty(s));.forEach(System.out::print);Console: abc

容易吧? 請注意,即使e會通過謂詞,e也不屬于返回流的一部分。 但是,它從未經過測試,因為takeWhile是在空字符串之后完成的。

前綴

為了確保我們了解文檔 ,讓我們了解術語。 從流的第一個元素開始的有序流的子序列稱為prefix 。

Stream<String> stream = Stream.of("a", "b", "c", "d", "e"); Stream<String> prefix = Stream.of("a", "b", "c"); Stream<String> subsequenceButNoPrefix = Stream.of("b", "c", "d"); Stream<String> subsetButNoPrefix = Stream.of("a", "c", "b");

takeWhile操作將返回最長的前綴 ,該前綴僅包含通過謂詞的元素。

前綴可以為空,因此如果第一個元素未能通過謂詞,它將返回空流。 相反,前綴可以是整個流,并且如果所有元素都通過謂詞,則操作將返回該前綴。

訂購

談論前綴僅對有序流有意義。 那么對于無序的人會發生什么呢? 與流一樣,故意不指定行為以啟用高性能實現。

從無序流中獲取將返回那些通過謂詞的元素的任意子集。 除非它們全部都執行,否則它將始終返回整個流。

并發

從有序并行流中獲取并不是最好的主意。 不同的線程必須配合以確保返回最長的前綴。 這種開銷可能會降低性能,以至于使流順序變得更有意義。

發布時間由安迪·亞瑟在CC-BY 2.0 。

流:: drop

接下來是dropWhile:

Stream<T> dropWhile(Predicate<? super T> predicate);

它與takeFirst的作用恰好相反:在有序流上調用它將返回一個新的元素,該元素包括使謂詞失敗的第一個元素和所有后續的元素。 或者,更接近其名稱,它在謂詞成立的同時丟棄元素并返回其余的元素。

時間為例:

Stream.of("a", "b", "c", "de", "f").dropWhile(s -> s.length <= 1);.forEach(System.out::print);Console: def

請注意,即使不通過謂詞,流也包含f。 與之前類似,操作在第一個字符串使謂詞失敗(在這種情況下為ef)之后停止。

在無序流上調用該操作將刪除那些無法通過謂詞的元素的子集。 除非所有人都這樣做,否則它將始終返回空流。 我們上面所說的有關術語和并發性的所有其他內容也適用于此。

流:: ofNullable

那真的很瑣碎。 讓我們看看它,而不是談論它:

long one = Stream.ofNullable("42").count(); long zero = Stream.ofNullable(null).count();

你答對了? 除非它為null,否則它將使用給定的元素創建一個流,在這種情況下,該流為空。 打哈欠!

它有其用例。 以前,如果某個邪惡的API給您提供了一個可能為null的實例,則開始對該實例可以提供的流進行操作是circuit回的:

// findCustomer can return null Customer customer = findCustomer(customerId);Stream<Order> orders = customer == null? Stream.empty(): customer.streamOrders(); // do something with stream of orders ...// alternatively, for the Optional lovers Optional.ofNullable(customer).map(Customer::streamOrders).orElse(Stream.empty(). // do something with stream of orders

現在情況變得更好了:

// findCustomer can return null Customer customer = findCustomer(customerId);Stream.ofNullable(customer).flatMap(Customer::streamOrders). // do something with stream of orders

反射

我們已經了解到takeWhile將如何返回通過謂詞的元素,并在第一個元素失敗時將流切斷。 相反,當第一個元素使謂詞失敗時,dropWhile也會剪切流,但在它之后將返回該謂詞。

作為一個告別,我們來看一個最后的示例,其中我們將HTML文件的meta元素中的所有行流式傳輸:

Files.lines(htmlFile).dropWhile(line -> !line.contains("<meta>").skip(1).takeWhile(line -> !line.contains("</meta>")

我們還了解了ofNullable。 我不知道為什么看起來如此熟悉? 是的,當然是可選的! 巧合的是,我接下來會介紹。 :)

敬請關注!

翻譯自: https://www.javacodegeeks.com/2016/06/java-9-additions-stream.html

總結

以上是生活随笔為你收集整理的Java 9附加流的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。