gpt4 book ai didi

java - 在处理可能为空的流时寻找解决 Stream.allMatch 等于 true 的优雅方法

转载 作者:行者123 更新时间:2023-12-05 05:42:58 48 4
gpt4 key购买 nike

我想使用以 allMatch 终端操作结束的单个流链获得一个 false 值。

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

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

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),我需要将流收集到一个临时列表中,并添加额外的检查以确认它是否为空,然后再传递给最后加工。这使得整个流程看起来很笨拙,请问有没有更优雅的解决方案?

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);

最佳答案

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

System.out.println(list.stream().filter(s -> s.endsWith("x")).count() > 0); 

关于java - 在处理可能为空的流时寻找解决 Stream.allMatch 等于 true 的优雅方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71913434/

48 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com