Rumah > Java > javaTutorial > teks badan

Bagaimana untuk Menukar Pilihan ke Strim dalam Java 8?

DDD
Lepaskan: 2024-10-24 01:10:02
asal
608 orang telah melayarinya

How to Convert Optional to Stream in Java 8?

Menukar Pilihan kepada Strim menggunakan Java 8's flatMap()

API Stream Java menawarkan penyelesaian pengekodan ringkas, tetapi terdapat senario tertentu yang mungkin menimbulkan cabaran. Satu situasi sedemikian melibatkan penukaran Pilihan ke Strim menggunakan flatMap().

Isunya

Memandangkan senarai perkara (Senaraikan perkara) dan kaedah (Pilihan selesaikan(Perkara perkara)), matlamatnya adalah untuk petakan perkara kepada Pilihans dan dapatkan Lain yang pertama. Penyelesaian konvensional ialah:

things.stream().flatMap(this::resolve).findFirst();
Salin selepas log masuk

Walau bagaimanapun, flatMap() menjangkakan strim sebagai nilai pulangan, manakala Optional tidak menyediakan kaedah stream().

Penyelesaian Java 16

Java 16 memperkenalkan Stream.mapMulti(), mengurangkan isu ini:

Optional<Other> result =
    things.stream()
          .map(this::resolve)
          .<Other>mapMulti(Optional::ifPresent)
          .findFirst();
Salin selepas log masuk

Java 9 Solution

Java 9 memperkenalkan Optional.stream(), membolehkan penukaran langsung:

Optional<Other> result =
    things.stream()
          .map(this::resolve)
          .flatMap(Optional::stream)
          .findFirst();
Salin selepas log masuk

Penyelesaian Java 8

Malangnya, Java 8 tidak mempunyai kaedah mudah untuk menukar Pilihan kepada Strim. Walau bagaimanapun, fungsi pembantu boleh digunakan:

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

Atas ialah kandungan terperinci Bagaimana untuk Menukar Pilihan ke Strim dalam Java 8?. 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
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!