Rumah > Java > javaTutorial > teks badan

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

Barbara Streisand
Lepaskan: 2024-10-23 16:16:02
asal
253 orang telah melayarinya

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

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

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

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

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!

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!