अगर कोई 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();
}