Java 记录过滤流的大小
如果有超过1个结果未通过筛选,我希望此流引发异常。有没有办法做到这一点 一个想法是使用Java 记录过滤流的大小,java,java-stream,Java,Java Stream,如果有超过1个结果未通过筛选,我希望此流引发异常。有没有办法做到这一点 一个想法是使用.count(),但我必须再次创建流 Optional<Result> filteredresultSet = results.stream() .filter(c -> c.equals("TOMATO)) .findAny(); 可选filteredresultSet=results.stream() .过滤器(c->c.equals(“番茄”) .fin
.count()
,但我必须再次创建流
Optional<Result> filteredresultSet = results.stream()
.filter(c -> c.equals("TOMATO))
.findAny();
可选filteredresultSet=results.stream()
.过滤器(c->c.equals(“番茄”)
.findAny();
您可以用reduce()
替换findAny()
,并在累加器中引发异常:
Optional<String> filteredresultSet = results.stream()
.filter("TOMATO"::equals)
.reduce((s1, s2) -> {
throw new MyException();
});
这将返回
容器的一个实例,或者如果流为空,则返回null
。然后,您可以检查计数
,并返回值的可选
,您可以用减少()
替换findAny()
,并在累加器中引发异常:
Optional<String> filteredresultSet = results.stream()
.filter("TOMATO"::equals)
.reduce((s1, s2) -> {
throw new MyException();
});
这将返回容器的一个实例,或者如果流为空,则返回null
。然后,您可以检查计数
,并返回值
的可选
一个简单的方法是使用限制(2)
在流上进行两次匹配后短路,然后收集到列表或数组
List<Result> filtered = results.stream()
.filter(c -> c.equals("TOMATO"))
.limit(2) // we don't need to know if there are more than 2 matches
.collect(toList());
if (filtered.size() > 1) {
// throw or log
}
return filtered.isEmpty() ? Optional.empty() : Optional.of(filtered.get(0));
List filtered=results.stream()
.filter(c->c.equals(“番茄”))
.limit(2)//我们不需要知道是否有超过2个匹配项
.collect(toList());
如果(筛选的.size()>1){
//投掷或记录
}
返回filtered.isEmpty()?Optional.empty():Optional.of(filtered.get(0));
一种简单的方法是使用.limit(2)
在两次匹配后对流进行短路,然后收集到列表或数组中
List<Result> filtered = results.stream()
.filter(c -> c.equals("TOMATO"))
.limit(2) // we don't need to know if there are more than 2 matches
.collect(toList());
if (filtered.size() > 1) {
// throw or log
}
return filtered.isEmpty() ? Optional.empty() : Optional.of(filtered.get(0));
List filtered=results.stream()
.filter(c->c.equals(“番茄”))
.limit(2)//我们不需要知道是否有超过2个匹配项
.collect(toList());
如果(筛选的.size()>1){
//投掷或记录
}
返回filtered.isEmpty()?Optional.empty():Optional.of(filtered.get(0));
第三方库可以接受吗?这听起来像是Guava的完美工作。是的!这完全有效!作为一个附带问题,如果我只想记录问题,而不抛出异常,该怎么办?你总是可以捕获异常并记录,而不是……当然……我没想过。谢谢你,第三方库可以接受吗?这听起来像番石榴的完美工作。是的!这完全有效!作为一个附带问题,如果我只想记录问题,而不抛出异常怎么办?你总是可以捕获异常并记录,而不是…当然…我没有思考。谢谢