Stream
비 터미널 작업으로 a가 비어 있는지 확인 하고 그렇지 않은 경우 예외를 throw하려면 어떻게해야합니까?
기본적으로 아래 코드와 동일한 것을 찾고 있지만 중간에 스트림을 구체화하지 않습니다. 특히, 터미널 작업에서 스트림이 실제로 사용되기 전에는 검사가 발생하지 않아야합니다.
public Stream<Thing> getFilteredThings() {
Stream<Thing> stream = getThings().stream()
.filter(Thing::isFoo)
.filter(Thing::isBar);
return nonEmptyStream(stream, () -> {
throw new RuntimeException("No foo bar things available")
});
}
private static <T> Stream<T> nonEmptyStream(Stream<T> stream, Supplier<T> defaultValue) {
List<T> list = stream.collect(Collectors.toList());
if (list.isEmpty()) list.add(defaultValue.get());
return list.stream();
}