首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在处理潜在的空流时,寻找解决Stream.allMatch等于true的优雅方法

在处理潜在的空流时,寻找解决Stream.allMatch等于true的优雅方法
EN

Stack Overflow用户
提问于 2022-04-18 14:55:14
回答 1查看 417关注 0票数 3

我希望使用一个以终端操作结束的单流链获得一个假值。

但是,我发现由于allMatch操作的设计,它在处理空流时将返回true。

例如,以下代码返回,因为过滤后的流在管道中为空。

代码语言:javascript
运行
复制
List<String> list = Arrays.asList("abc", "efg", "hij");
boolean isAllStartsWith1 = list.stream().filter(s-> s.endsWith("x")).allMatch(s->s.startsWith("1"));
System.out.println(isAllStartsWith1);

为了获得预期的结果(false),我需要将流收集到一个临时列表中,并添加额外的检查,以确认在传递到allMatch操作进行最终处理之前是否为空。这使得整个过程看起来非常笨重,是否有更优雅的解决方案来解决这个问题?

代码语言:javascript
运行
复制
List<String> list = Arrays.asList("abc", "efg", "hij");
List<String> filteredList = list.stream().filter(s-> s.endsWith("x")).collect(Collectors.toList());
boolean isAllStartsWith1 = !filteredList.isEmpty() && filteredList.stream().allMatch(s->s.startsWith("1"));
                        
System.out.println(isAllStartsWith1);
EN

回答 1

Stack Overflow用户

发布于 2022-04-18 15:25:59

如果结果大于0,则可以使用.count()计数返回true,否则为false。

代码语言:javascript
运行
复制
System.out.println(list.stream().filter(s -> s.endsWith("x")).count() > 0); 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71913434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档