>Java >java지도 시간 >스트림용 Java 9의 `takeWhile`에 해당하는 Java 8을 구현하는 방법은 무엇입니까?

스트림용 Java 9의 `takeWhile`에 해당하는 Java 8을 구현하는 방법은 무엇입니까?

DDD
DDD원래의
2024-12-19 21:17:10806검색

How to Implement Java 8's Equivalent of Java 9's `takeWhile` for Streams?

Java 8 스트림: 조건자로 제한

잠재적으로 무한한 스트림이 있는 시나리오에서는 처음 스트림까지 스트림을 제한해야 하는 경우가 종종 있습니다. 요소가 특정 조건자에 실패합니다. Java 9에는 유용한 takeWhile 작업이 도입되어 이 기능을 쉽게 사용할 수 있습니다.

불행히도 Java 8에는 이러한 작업이 없습니다. 따라서 이 동작을 달성하기 위한 대체 접근 방식을 모색해야 합니다.

Java 8에서 takeWhile 구현

Java 8에서 takeWhile을 구현하려면 다음 전략을 활용할 수 있습니다.

  1. 다음을 사용하여 스트림에서 반복자를 만듭니다. iterator().
  2. 조건자가 실패할 때까지 반복자를 통해 반복합니다.
  3. generate()를 사용하여 필터링된 요소를 새 스트림으로 수집합니다.

아래는 구현 예:

import java.util.Iterator;
import java.util.stream.Stream;

public class StreamTakeWhile {

    public static <T> Stream<T> takeWhile(Stream<T> stream, java.util.function.Predicate<T> predicate) {
        Iterator<T> iterator = stream.iterator();
        return Stream.generate(() -> {
            if (iterator.hasNext() && predicate.test(iterator.next())) {
                return iterator.next();
            }
            return null;
        });
    }

    public static void main(String[] args) {
        StreamTakeWhile.takeWhile(Stream.iterate(1, n -> n + 1), n -> n < 10)
                .forEach(System.out::println);
    }
}

Java 9 사용 takeWhile

Java 9에서는 아래와 같이 takeWhile 작업을 직접 활용할 수 있습니다.

IntStream
    .iterate(1, n -> n + 1)
    .takeWhile(n -> n < 10)
    .forEach(System.out::println);

위 내용은 스트림용 Java 9의 `takeWhile`에 해당하는 Java 8을 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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