ฉันจะตรวจสอบได้อย่างไรว่า a Stream
ว่างเปล่าและโยนข้อยกเว้นหากไม่ใช่เป็นการดำเนินการที่ไม่ใช่เทอร์มินัล
โดยพื้นฐานแล้วฉันกำลังมองหาสิ่งที่เทียบเท่ากับโค้ดด้านล่าง แต่ไม่มีการระบุสตรีมระหว่างนั้น โดยเฉพาะอย่างยิ่งการตรวจสอบไม่ควรเกิดขึ้นก่อนที่สตรีมจะถูกใช้ไปจริงโดยการดำเนินการเทอร์มินัล
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();
}