簡體   English   中英

IntStream.empty()方法的目的是什么?

[英]What's the purpose of the IntStream.empty() method?

在關於新JDK8流API的教程中,我遇到了IntStreamDoubleStreamLongStream的靜態.empty()方法。

那么什么時候使用這種方法有意義呢?

一個很好的例子是從OptionalInt創建IntStream :如果存在可選項,則需要單例流;如果不存在可選項,則需要空流:

public static IntStream ofOptional(OptionalInt optional) {
    return optional.isPresent() ? IntStream.of(optional.get()) : IntStream.empty();
}

實際上這種方法已經添加到JDK9中。

(您曾詢問過IntStreamLongStreamDoubleStream上的empty()方法,但此方法也在Stream接口上用於引用類型。)

一般的答案是, empty()可用作傳遞給獲取流的API的流源 - 無論是作為參數還是作為返回值 - 以及沒有要傳遞的值。 在大多數情況下,您不能傳遞null ,您必須傳遞某種類型的流。 獲取沒有值的流的方法是使用Stream.empty()和朋友。

這是一個重復偶數並丟棄奇數並將它們收集到列表中的示例:

    List<Integer> list = 
        IntStream.range(0, 10)
                 .flatMap(i -> (i & 1) == 0 ? IntStream.of(i, i) : IntStream.empty())
                 .boxed()
                 .collect(Collectors.toList());

結果是

[0, 0, 2, 2, 4, 4, 6, 6, 8, 8]

正如人們所料。 重點是flatMap()傳遞一個值,並期望接收任意數量的值,包括零值。 這樣做的方法是讓flat-mapping操作返回一個值流。 要使其返回零值,它將返回一個空流。

您可以使用初始化您提到的任何類型的空Stream。 我將其視為構建新對象的另一種方式。 就那么簡單。

https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html#empty--

暫無
暫無

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

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