Java流从集合中获取单个元素

问题描述 投票:0回答:2

我正在使用非流方式从集合中获取单个元素。

List<MyCustomClass> list = OtherObject.getMyList();

if (list.size() != 1) {
throw new RuntimeException();
}

MyCustomClass customClass = list.get(0);

代替这种多班轮方法,有什么方法可以通过流实现这一目标?

java stream
2个回答
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()可能在这里适用。

希望有所帮助。


0
投票

您可以使用reduce(accumulator)reduce(accumulator)来确保流仅产生一个结果。

orElseThrow(exceptionSupplier)
© www.soinside.com 2019 - 2024. All rights reserved.