> Java > java지도 시간 > 본문

Java에서 옵션을 스트림으로 평면화하는 방법

Barbara Streisand
풀어 주다: 2024-10-24 04:16:30
원래의
244명이 탐색했습니다.

How to Flatten Optionals into a Stream in Java

Stream::FlatMap을 사용한 Java 8의 선택적 사용

Stream::FlatMap은 여러 스트림을 단일 스트림으로 결합하기 위한 Java 8의 강력한 도구입니다. 하지만 스트림을 반환해야 하는데 이는 Optionals를 처리할 때 문제가 될 수 있습니다.

문제

List 및 각 사물을 Optional에 매핑하는 방법이 있습니다. 사물을 Optional에 매핑한 다음 비어 있지 않은 첫 번째 Optional을 검색하려고 합니다.

Stream::FlatMap 및 Optional::findFirst를 사용하는 순진한 접근 방식은 실패합니다. Optional은 stream()을 제공하지 않기 때문입니다. 방법:

<code class="java">things.stream().flatMap(this::resolve).findFirst(); // Error!</code>
로그인 후 복사

솔루션

Java 16 이상

Java 16에서는 Optional을 스트림에 매핑할 수 있는 Stream.mapMulti를 도입했습니다. 비어 있지 않은 요소:

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

Java 9

Java 9에는 비어 있지 않은 Optional 값의 스트림을 직접 반환하는 Optional.stream이 추가되었습니다.

<code class="java">Optional<Other> result =
    things.stream()
          .map(this::resolve)
          .flatMap(Optional::stream)
          .findFirst();</code>
로그인 후 복사

Java 8

Java 8의 경우 도우미 함수를 사용하여 Optional을 스트림으로 변환할 수 있습니다.

<code class="java">static <T> Stream<T> streamopt(Optional<T> opt) {
    if (opt.isPresent())
        return Stream.of(opt.get());
    else
        return Stream.empty();
}</code>
로그인 후 복사

사용 이 도우미 기능의 솔루션은 다음과 같습니다.

<code class="java">Optional<Other> result =
    things.stream()
          .flatMap(t -> streamopt(resolve(t)))
          .findFirst();</code>
로그인 후 복사

위 내용은 Java에서 옵션을 스트림으로 평면화하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!