>  기사  >  Java  >  Java 스트림에서 객체 목록을 선택 사항으로 효율적으로 변환하는 방법은 무엇입니까?

Java 스트림에서 객체 목록을 선택 사항으로 효율적으로 변환하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-10-23 16:16:02254검색

How to Efficiently Convert List of Objects to Optional in Java Streams?

Java 8의 Optional 및 Stream::FlatMap으로 간결해지기

Java 8 스트림으로 작업할 때 List Optional 첫 번째 Other 값을 효율적으로 추출하는 것은 어려울 수 있습니다. flatMap에는 일반적으로 반환 스트림이 필요하지만 Optional에 대한 stream()이 없으면 문제가 복잡해집니다.

Java 16 솔루션

Java 16에서는 Stream.mapMulti를 도입하여 더 많은 기능을 지원합니다. 간결한 접근 방식:

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

Java 9 솔루션

JDK 9는 Optional.stream을 추가하여 작업을 단순화합니다.

<code class="java">Optional<Other> result = things.stream()
    .map(this::resolve)
    .flatMap(Optional::stream)
    .findFirst();</code>

Java 8 솔루션

Java 8에서는 다음 접근 방식을 사용할 수 있습니다.

<code class="java">Optional<Other> result = things.stream()
    .map(this::resolve)
    .flatMap(o -> o.isPresent() ? Stream.of(o.get()) : Stream.empty())
    .findFirst();</code>

도우미 기능을 사용하여 Optional을 Stream으로 변환:

<code class="java">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();</code>

위 내용은 Java 스트림에서 객체 목록을 선택 사항으로 효율적으로 변환하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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