Rumah > Java > javaTutorial > teks badan

Cara Meratakan Pilihan menjadi Strim di Java

Barbara Streisand
Lepaskan: 2024-10-24 04:16:30
asal
244 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

Menggunakan fungsi pembantu ini, penyelesaiannya menjadi:

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

Atas ialah kandungan terperinci Cara Meratakan Pilihan menjadi Strim di Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!