簡體   English   中英

在本例中,anyMatch 如何在 java stream 中工作

[英]How does anyMatch work in java stream in this example

這是我的代碼:

Stream.of("d2", "a2", "b1", "b3", "c")
                .map(s -> {
                    System.out.println("map: " + s);
                    return s.toUpperCase();
                })
                .anyMatch(s -> {
                    System.out.println("anyMatch: " + s);
                    return ((String) s).startsWith("A");
                });

output 是:

map: d2
anyMatch: D2
map: a2
anyMatch: A2

我的問題是為什么第一個元素進入 stream 而第三個和第四個沒有?

任何詳細的解釋表示贊賞。

javadoc的文本:

返回此 stream 的任何元素是否與提供的謂詞匹配。 如果不需要確定結果,則可能不會評估所有元素的謂詞。 如果 stream 為空,則返回 false 並且不評估謂詞。

這是一個短路操作,在遇到該元素時結果為真。

如果要處理每個項目,請使用forEach

您的代碼相當於:

for (String s : new String[] {"d2", "a2", "b1", "b3", "c"}) {
    System.out.println("map: " + s);
    s = s.toUpperCase();
    System.out.println("anyMatch: " + s);
    if (((String) s).startsWith("A"))
        break;
}

"a2"之后的元素因為break語句而沒有被處理。 這被稱為短路,即它在到達末端之前斷開循環(電路)(在末端附近停止)。

anyMatch(...)方法被記錄為短路

這是一個短路終端操作

該鏈接導致此解釋:

此外,一些操作被認為是短路操作。 如果在出現無限輸入時,中間操作可能會產生有限的 stream,則它是短路的。 如果一個終端操作在有無限輸入時可能會在有限時間內終止,那么它就是短路的。 在流水線中進行短路操作是無限 stream 處理在有限時間內正常終止的必要條件,但不是充分條件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM