此问题已在此处找到答案:
获取与条件匹配的第一个元素(3个答案)昨天关门了。我想知道是否有一种方法可以使用stream().filter()直接在java中过滤出单个元素,而不需要创建列表和获取0索引。我的代码如下所示:
String foo = stringList .stream().filter(item -> item.equals("foo")) .collect(Collectors.toList()).get(0);
String foo = stringList
.stream().filter(item -> item.equals("foo"))
.collect(Collectors.toList()).get(0);
我希望在不需要创建列表的情况下获取元素。谢谢
xzabzqsa1#
是的,你会打电话的 findFirst() :
findFirst()
String foo = stringList .stream().filter(item -> item.equals("foo")) .findFirst().get();
.findFirst().get();
作为奖励,它返回一个 Optional 允许您处理没有元素与过滤器匹配的情况:
Optional
String foo = stringList .stream().filter(item -> item.equals("foo")) .findFirst().orElse(...);
.findFirst().orElse(...);
mf98qq942#
你要找的是 findFirst 或 findAny ,这将返回一个可选的:
findFirst
findAny
String foo = stringList.stream() .filter("foo"::equals) .findAny() .orElse(null);
String foo = stringList.stream()
.filter("foo"::equals)
.findAny()
.orElse(null);
这还将处理创建的列表为空并抛出 ArrayIndexOutOfBoundsException .
ArrayIndexOutOfBoundsException
2条答案
按热度按时间xzabzqsa1#
是的,你会打电话的
findFirst()
:作为奖励,它返回一个
Optional
允许您处理没有元素与过滤器匹配的情况:mf98qq942#
你要找的是
findFirst
或findAny
,这将返回一个可选的:这还将处理创建的列表为空并抛出
ArrayIndexOutOfBoundsException
.