Java 9 스트림 API 개선: takeWhile 등 새로운 메서드
스트림은 객체 시퀀스에서 집계 연산을 수행하도록 돕기 위해 Java에 도입되었습니다. Java 9에서는 스트림을 더 좋게 만들기 위해 몇 가지 메서드가 추가되었습니다.
takeWhile(Predicate 인터페이스)
구문
default Stream<T> takeWhile(Predicate<? super T> predicate)
takeWhile 메서드는 프레디케이트가 false를 반환할 때까지 모든 값을 가져옵니다. 정렬된 스트림의 경우, 주어진 프레디케이트와 일치하는 이 스트림에서 가져온 요소의 가장 긴 접두사로 구성된 스트림을 반환합니다.
예제
import java.util.stream.Stream;
public class Tester {
public static void main(String[] args) {
Stream.of("a","b","c","","e","f").takeWhile(s -> !s.isEmpty())
.forEach(System.out::print);
}
}
출력
abc
takeWhile 메서드는 a, b, c 값을 모두 가져간 후 문자열이 비면 실행을 멈춥니다.
dropWhile(Predicate 인터페이스)
구문
default Stream<T> dropWhile(Predicate<? super T> predicate)
dropWhile 메서드는 프레디케이트가 true를 반환할 때까지 시작 부분의 모든 값을 버립니다. 정렬된 스트림의 경우, 주어진 프레디케이트와 일치하는 요소의 가장 긴 접두사를 버린 후 이 스트림의 남은 요소로 구성된 스트림을 반환합니다.
예제
import java.util.stream.Stream;
public class Tester {
public static void main(String[] args) {
Stream.of("a","b","c","","e","f").dropWhile(s -> !s.isEmpty())
.forEach(System.out::print);
System.out.println();
Stream.of("a","b","c","","e","","f").dropWhile(s -> !s.isEmpty())
.forEach(System.out::print);
}
}
출력
ef
ef
dropWhile 메서드는 a, b, c 값을 버린 후 문자열이 비면 모든 값을 가져옵니다.
iterate
구문
static <T> Stream<T> iterate(T seed, Predicate<? super T> hasNext, UnaryOperator<T> next)
iterate 메서드는 이제 hasNext 프레디케이트를 매개변수로 가지며, hasNext 프레디케이트가 false를 반환하면 루프를 멈춥니다.
예제
import java.util.stream.IntStream;
public class Tester {
public static void main(String[] args) {
IntStream.iterate(3, x -> x < 10, x -> x + 3).forEach(System.out::println);
}
}
출력
3
6
9
ofNullable
구문
static <T> Stream<T> ofNullable(T t)
ofNullable 메서드는 NullPointerException을 방지하고 스트림에 대한 null 체크를 피하기 위해 도입되었습니다. 이 메서드는 비-null인 경우 단일 요소를 포함하는 순차 스트림을 반환하고, 그렇지 않으면 빈 스트림을 반환합니다.
예제
import java.util.stream.Stream;
public class Tester {
public static void main(String[] args) {
long count = Stream.ofNullable(100).count();
System.out.println(count);
count = Stream.ofNullable(null).count();
System.out.println(count);
}
}
출력
1
0