首頁  >  文章  >  Java  >  如何在 Java Streams 中有效地將物件清單轉換為可選物件?

如何在 Java Streams 中有效地將物件清單轉換為可選物件?

Barbara Streisand
Barbara Streisand原創
2024-10-23 16:16:02260瀏覽

How to Efficiently Convert List of Objects to Optional in Java Streams?

使用Java 8 的Optional 和Stream::flatMap 變得簡潔

使用Java 8 流時,轉換List至可選有效地提取第一個「其他」價值可能是一個挑戰。雖然 flatMap 通常需要返回流,但可選的 Stream() 的缺失使問題變得複雜。

Java 16 解決方案

Java 16 引入了Stream.mapMulti,支援更多簡潔的方法:

<code class="java">Optional<Other> result = things.stream()
    .map(this::resolve)
    .<Other>mapMulti(Optional::ifPresent)
    .findFirst();</code>

9 解決方案

JDK 9 增加了Optional.stream,簡化了任務:
<code class="java">Optional<Other> result = things.stream()
    .map(this::resolve)
    .flatMap(Optional::stream)
    .findFirst();</code>

Java 8 解決方案

<code class="java">Optional<Other> result = things.stream()
    .map(this::resolve)
    .flatMap(o -> o.isPresent() ? Stream.of(o.get()) : Stream.empty())
    .findFirst();</code>
<code class="java">static <T> Stream<T> streamopt(Optional<T> opt) {
    if (opt.isPresent())
        return Stream.of(opt.get());
    else
        return Stream.empty();
}

Optional<Other> result = things.stream()
    .flatMap(t -> streamopt(resolve(t)))
    .findFirst();</code>
使用輔助函式將Optional 轉換為Stream:

以上是如何在 Java Streams 中有效地將物件清單轉換為可選物件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn