Rumah  >  Artikel  >  Java  >  Cara Meratakan Pilihan menjadi Strim di Java

Cara Meratakan Pilihan menjadi Strim di Java

Barbara Streisand
Barbara Streisandasal
2024-10-24 04:16:30321semak imbas

How to Flatten Optionals into a Stream in Java

Penggunaan Pilihan Java 8 dengan Strim::flatMap

Stream::flatMap ialah alat berkuasa dalam Java 8 untuk menggabungkan berbilang strim ke dalam satu strim. Walau bagaimanapun, ia memerlukan mengembalikan strim, yang boleh menimbulkan masalah apabila berurusan dengan Pilihan.

Masalah

Pertimbangkan situasi di mana kita mempunyai Senarai dan kaedah yang memetakan setiap Perkara kepada Pilihan. Kami ingin memetakan Perkara kepada Pilihan, dan kemudian mendapatkan Pilihan bukan kosong yang pertama.

Pendekatan naif menggunakan Stream::flatMap dan Optional::findFirst akan gagal, kerana Pilihan tidak menyediakan aliran() kaedah:

<code class="java">things.stream().flatMap(this::resolve).findFirst(); // Error!</code>

Penyelesaian

Java 16 dan Kemudian

Java 16 memperkenalkan Stream.mapMulti, yang membenarkan pemetaan Pilihan kepada aliran elemen bukan kosongnya:

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

Java 9

Java 9 ditambah Optional.stream, yang secara langsung mengembalikan aliran nilai Pilihan yang tidak kosong:

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

Java 8

Untuk Java 8, kita boleh 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();
}</code>

Menggunakan fungsi pembantu ini, penyelesaiannya menjadi:

<code class="java">Optional<Other> result =
    things.stream()
          .flatMap(t -> streamopt(resolve(t)))
          .findFirst();</code>

Atas ialah kandungan terperinci Cara Meratakan Pilihan menjadi Strim di 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