조건자가 있는 Stream.iterate()
반복을 중지하기 위해 조건자를 사용합니다 — 스트림 형태의 for 루프.
코드 비교
✕ Java 8
Stream.iterate(1, n -> n * 2)
.limit(10)
.forEach(System.out::println);
// can't stop at a condition
✓ Java 9+
Stream.iterate(
1,
n -> n < 1000,
n -> n * 2
).forEach(IO::println);
// stops when n >= 1000
이 코드에 문제가 있나요? 알려주세요.
모던 방식이 더 나은 이유
자연스러운 종료
임의의 제한 대신 조건에 따라 중지합니다.
for 루프 동등물
for(seed; hasNext; next)와 동일한 의미론.
무한 스트림 위험 없음
조건자가 종료를 보장합니다.
이전 방식
iterate + limit
모던 방식
iterate(시드, 조건자, 연산)
JDK 버전
9
난이도
중급
JDK 지원
조건자가 있는 Stream.iterate()
사용 가능
JDK 9 (2017년 9월) 이후 널리 사용 가능
동작 원리
세 인수 Stream.iterate(seed, hasNext, next)는 for 루프처럼 작동합니다. hasNext 조건자가 false를 반환할 때 스트림이 종료됩니다.
관련 문서