>  기사  >  Java  >  Java 8에서 Optional을 Stream으로 변환하는 방법은 무엇입니까?

Java 8에서 Optional을 Stream으로 변환하는 방법은 무엇입니까?

DDD
DDD원래의
2024-10-24 01:10:02606검색

How to Convert Optional to Stream in Java 8?

Java 8의 flatMap()을 사용하여 Optional을 Stream으로 변환

Java의 Stream API는 간결한 코딩 솔루션을 제공하지만 문제를 일으킬 수 있는 특정 시나리오가 있습니다. 이러한 상황 중 하나는 Optional Stream flatMap()을 사용합니다.

문제

주어진 사물 목록(List things)과 메서드(Optional 해결(Thing thing))의 목표는 다음과 같습니다. Optional에 항목을 매핑하고 첫 번째 Other를 검색합니다. 일반적인 솔루션은 다음과 같습니다.

things.stream().flatMap(this::resolve).findFirst();

그러나 flatMap()은 스트림을 반환 값으로 예상하는 반면 Optional은 stream() 메서드를 제공하지 않습니다.

Java 16 솔루션

Java 16에서는 Stream.mapMulti()를 도입하여 이 문제를 완화했습니다.

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

Java 9 솔루션

Java 9에서는 직접 변환이 가능한 Optional.stream()을 도입했습니다.

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

Java 8 솔루션

안타깝게도 Java 8에는 Optional을 Stream으로 변환하는 간단한 방법이 없습니다. 그러나 도우미 기능을 활용할 수도 있습니다.

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

위 내용은 Java 8에서 Optional을 Stream으로 변환하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.