Java 流和函数接口:在流中抛出异常并聚合它们
我是新的流和功能接口,只是想知道这个要求是否可以通过他们来完成。给定一个整数数组,如果其中任何一个是负的,则不要处理,而是抛出包含所有负整数的异常Java 流和函数接口:在流中抛出异常并聚合它们,java,java-8,functional-programming,java-stream,Java,Java 8,Functional Programming,Java Stream,我是新的流和功能接口,只是想知道这个要求是否可以通过他们来完成。给定一个整数数组,如果其中任何一个是负的,则不要处理,而是抛出包含所有负整数的异常 Example: INPUT = [0, -1, -2] EXPECTED Exception: invalid integers: (-1, -2). 我确实知道如何使用for循环实现这一点,但我真的很好奇这是否可以通过流和功能接口实现。因此,我们非常感谢您的帮助 int [] input = {0, -1, -2}; List<Inte
Example: INPUT = [0, -1, -2]
EXPECTED Exception: invalid integers: (-1, -2).
我确实知道如何使用for循环实现这一点,但我真的很好奇这是否可以通过流和功能接口实现。因此,我们非常感谢您的帮助
int [] input = {0, -1, -2};
List<Integer> negatives = new LinkedList<>();
for (int i : input) {
if (i < 0) {
negatives.add(i);
}
}
if (negatives.isEmpty() == false) {
throw new IllegalArgumentException("Invalid integers: " + negatives);
}
int[]输入={0,-1,-2};
列表否定=新建LinkedList();
for(int i:输入){
if(i<0){
否定。加入(i);
}
}
if(negatives.isEmpty()==false){
抛出新的IllegalArgumentException(“无效整数:+负数”);
}
我会用一个简单的过滤器编写它:
final List<Integer> invalid = Arrays.asList(0, -1, -2).stream()
.filter(i -> i < 0)
.collect(Collectors.toList());
if (!invalid.isEmpty()) throw new RuntimeException("Invalid integers " + invalid);
final List invalid=Arrays.asList(0,-1,-2).stream()
.filter(i->i<0)
.collect(Collectors.toList());
如果(!invalid.isEmpty())抛出新的RuntimeException(“无效整数”+无效);
您可以执行以下操作
public static void main(String[] args) {
List<Integer> list = Arrays.asList(1, 2, 3, -3, -2);
checkList(list);
}
private static void checkList(List<Integer> list) {
list.stream().filter(i -> i < 0).findFirst()
.ifPresent(integer -> {
throw new IllegalArgumentException("Invalid are" +
Arrays.toString(list.stream().filter(i -> i < 0).toArray()));
});
}
您必须在有效流上运行什么类型的处理?你能为
循环发布你的吗?分享你如何使用循环来完成你重复了两次的循环,这并不理想。如果列表中有10亿个元素,而唯一的负元素是最后一个呢?@Michael,当然,但不知道如何在一行中做到这一点,在全流程中,“在一行中做到这一点”是什么要求?为什么在一行中做这件事——如果可读性和效率较低的话——是件好事?@Michael不知道^^但显然他接受了我的,但我同意你的也很好,但我一直在寻找一种方法,而不仅仅是收集和检查
Exception in thread "main" java.lang.RuntimeException: Invalid are[-3, -2]