Rumah  >  Artikel  >  Java  >  Bagaimana untuk Menukar Senarai Objek dengan Cekap kepada Pilihan dalam Aliran Java?

Bagaimana untuk Menukar Senarai Objek dengan Cekap kepada Pilihan dalam Aliran Java?

Barbara Streisand
Barbara Streisandasal
2024-10-23 16:16:02254semak imbas

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

Menjadi Ringkas dengan Pilihan dan Strim Java 8::flatMap

Apabila bekerja dengan strim Java 8, mengubah Senarai kepada Pilihan dan mengekstrak nilai Lain yang pertama dengan cekap boleh menjadi satu cabaran. Walaupun flatMap biasanya memerlukan aliran pulangan, ketiadaan stream() untuk Pilihan merumitkan perkara.

Penyelesaian Java 16

Java 16 memperkenalkan Stream.mapMulti, membolehkan lebih banyak pendekatan ringkas:

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

Penyelesaian Java 9

JDK 9 menambah Optional.stream, memudahkan tugas:

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

Penyelesaian Java 8

Dalam Java 8, pendekatan berikut boleh diambil:

<code class="java">Optional<Other> result = things.stream()
    .map(this::resolve)
    .flatMap(o -> o.isPresent() ? Stream.of(o.get()) : Stream.empty())
    .findFirst();</code>

Menggunakan fungsi pembantu untuk menukar Pilihan kepada Strim:

<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>

Atas ialah kandungan terperinci Bagaimana untuk Menukar Senarai Objek dengan Cekap kepada Pilihan dalam Aliran Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn