Stream::FlatMap은 여러 스트림을 단일 스트림으로 결합하기 위한 Java 8의 강력한 도구입니다. 하지만 스트림을 반환해야 하는데 이는 Optionals를 처리할 때 문제가 될 수 있습니다.
List
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!