Java流:根据流中的值从流中引发异常
考虑以下伪代码:Java流:根据流中的值从流中引发异常,java,exception,java-stream,Java,Exception,Java Stream,考虑以下伪代码: List<Integer> intList = new ArrayList<>(); intList.add(10); intList.add(20); intList.add(30); intList.stream().filter(i -> i > 40) .throwIf(size of list <= 0) .collect(Collectors.toList()); List intList=new Arr
List<Integer> intList = new ArrayList<>();
intList.add(10);
intList.add(20);
intList.add(30);
intList.stream().filter(i -> i > 40)
.throwIf(size of list <= 0)
.collect(Collectors.toList());
List intList=new ArrayList();
增加(10);
增加(20);
增加(30);
intList.stream().filter(i->i>40)
.throwIf(列表的大小您可以检查是否有任何元素通过了筛选,如果没有,则使用可选的或lsetrow来抛出异常:
Integer match =
intList.stream()
.filter(i -> i > 40)
.findAny()
.orElseThrow(...);
当然,这只会在未引发异常时为您提供一个通过过滤器的元素,因此我不确定它是否正是您想要的。如果要在列表大小超过n个元素时返回列表,您可以使用CollectingAnd然后
收集器:
List<Integer> list =
intList.stream()
.filter(i -> i > 40)
.collect(collectingAndThen(toList(), l -> { if (l.isEmpty()) throw new WhatEverRuntimeException(); return l;}));
列表=
intList.stream()
.过滤器(i->i>40)
.collect(collectingAndThen(toList(),l->{if(l.isEmpty())抛出新WhatEverRuntimeException();返回l;}));
但是,它的可读性可能不如它得到的那么好,因此您可以在收集结果后简单地添加一条if语句:
List<Integer> list = intList.stream().filter(i -> i > 40).collect(toList());
if (list.isEmpty()) {
throw new WhatEverRuntimeException();
}
List List=intList.stream().filter(i->i>40.collect(toList());
if(list.isEmpty()){
抛出新WhatEverRuntimeException();
}
最后,如果大小下限为100,您可能不想构建列表。在这种情况下,您可以使用两个流管道,一个用于计算满足设置的下限的元素数量,另一个用于实际构建列表:
long count = intList.stream().filter(i -> i > 40).count();
if(count < limit) {
throw new WhatEverRuntimeException();
}
List<Integer> list = intList.stream().filter(i -> i > 40).collect(toList());
long count=intList.stream().filter(i->i>40.count();
如果(计数<限制){
抛出新WhatEverRuntimeException();
}
List List=intList.stream().filter(i->i>40.collect(toList());
这种方法有一个限制,即我们不能从中返回列表。@eatSleepCode在这种情况下,您需要收集列表并在之后进行检查。流只能产生一个结果。