我正在使用非流方式从集合中获取单个元素。
List<MyCustomClass> list = OtherObject.getMyList();
if (list.size() != 1) {
throw new RuntimeException();
}
MyCustomClass customClass = list.get(0);
代替这种多班轮方法,有什么方法可以通过流实现这一目标?
正如Chrylis所说,没有一种方法可以确保流最多包含一个元素。但是,有一个findFirst方法返回一个可选值。
List<String> strings = new ArrayList<>();
Optional<String> maybeFirst = strings.stream().findFirst();
// we now have an optional, lets force a value
String value = maybeFirst.orElseThrow(IllegalArgumentException::new);
// if there isn't a value, we'll throw an illegal arguement exception.
可以折叠为以下内容。
String value = strings.stream()
.findFirst()
.orElseThrow(() -> new IllegalArgumentException("There must be at least one string."));
还有一个.findAny()
可能在这里适用。
希望有所帮助。
您可以使用reduce(accumulator)
和reduce(accumulator)
来确保流仅产生一个结果。
orElseThrow(exceptionSupplier)