Rumah >Java >javaTutorial >Bagaimana untuk Menukar Pilihan ke Strim dalam Java 8?

Bagaimana untuk Menukar Pilihan ke Strim dalam Java 8?

DDD
DDDasal
2024-10-24 01:10:02680semak imbas

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();

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();

Java 9 Solution

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

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

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();

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!

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