如何檢查Stream
是否爲空,如果不是非終端操作,則會拋出異常?如何檢查Java 8 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();
}
你不能擁有你的蛋糕,也不能吃它 - 而且在這種情況下也是如此。你必須*消費*流來查明它是否爲空。這就是Stream的語義(懶惰)。 – 2014-10-30 09:21:11
它將被最終消耗,此時檢查應該發生 – Cephalopod 2014-10-30 09:22:32
要檢查流是否爲空,您必須嘗試使用至少一個元素。那時溪流已經失去了「童貞」,從一開始就不能再被消耗掉。 – 2014-10-30 09:27:09