使用java stream()api过滤掉没有列表的单个元素

j5fpnvbx  于 2021-08-20  发布在  Java
关注(0)|答案(2)|浏览(450)

此问题已在此处找到答案

获取与条件匹配的第一个元素(3个答案)
昨天关门了。
我想知道是否有一种方法可以使用stream().filter()直接在java中过滤出单个元素,而不需要创建列表和获取0索引。
我的代码如下所示:

String foo = stringList
            .stream().filter(item -> item.equals("foo"))
            .collect(Collectors.toList()).get(0);

我希望在不需要创建列表的情况下获取元素。
谢谢

xzabzqsa

xzabzqsa1#

是的,你会打电话的 findFirst() :

String foo = stringList
            .stream().filter(item -> item.equals("foo"))
            .findFirst().get();

作为奖励,它返回一个 Optional 允许您处理没有元素与过滤器匹配的情况:

String foo = stringList
            .stream().filter(item -> item.equals("foo"))
            .findFirst().orElse(...);
mf98qq94

mf98qq942#

你要找的是 findFirstfindAny ,这将返回一个可选的:

String foo = stringList.stream()
                       .filter("foo"::equals)
                       .findAny()
                       .orElse(null);

这还将处理创建的列表为空并抛出 ArrayIndexOutOfBoundsException .

相关问题