Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 流和函数接口:在流中抛出异常并聚合它们_Java_Java 8_Functional Programming_Java Stream - Fatal编程技术网

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]