java附加属性_Java 9附加流
java附加屬性
Java 9即將發布! 它不僅僅是Jigsaw項目 。 (我也很驚訝。)它給平臺帶來了很多小的變化,我想一一看一下。 我將標記所有這些帖子,您可以在這里找到它們。
讓我們從…開始
流
Streams學習了兩個新技巧。 第一個處理前綴,流現在可以理解前綴。 我們可以使用謂詞來測試流的元素,從一開始就可以使用或刪除它們,直到第一個未通過測試為止。
Stream :: takeWhile
讓我們先來看一下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附加屬性
總結
以上是生活随笔為你收集整理的java附加属性_Java 9附加流的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 以太网默认网关不可用以太网默认网关不可用
 - 下一篇: 帝国单机游戏电脑版下载(帝国战争游戏单机