Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.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 8流非法异常_Java_Java 8_Java Stream - Fatal编程技术网

Java 8流非法异常

Java 8流非法异常,java,java-8,java-stream,Java,Java 8,Java Stream,======================更新===============================================: 事实上,我得到了流作为我的方法的参数,我不能改变这一点。我必须处理三次 MyAggregate aggregate(Stream<IncomingProduct> products){ Supplier<Stream<IncomingProduct>> streamSupplier

======================更新===============================================: 事实上,我得到了流作为我的方法的参数,我不能改变这一点。我必须处理三次

MyAggregate aggregate(Stream<IncomingProduct> products){
        Supplier<Stream<IncomingProduct>> streamSupplier
                = () -> products;
        if(streamSupplier.get() == null || !streamSupplier.get().findAny().isPresent()){
            return null;
        }
        List<MyProduct> myProducts = streamSupplier.get()
                .map(p -> new MyProduct(p.getName(), p.getPrice()))
                .collect(Collectors.toList());
        BigDecimal price = myProducts.stream()
                .reduce(BigDecimal.ZERO, BigDecimal::add);
        return new MyAggregate(myProducts,price);
    }
}
我得到以下例外:
线程主java.lang.IllegalStateException中的异常:流已被操作或关闭

一旦通过任何操作(如map、filter或任何其他终端操作(如collect、anymatch等)访问流,您就不能像这样使用流两次,。然后您不能再次使用它,您必须将产品存储在列表中,然后使用list.stream,以便为这两个操作创建新的流

 List<SoldProduct> products = List.of(s1,s2,s3);
 Supplier<List<SoldProduct>> listSupplier
                = () -> products;
 listSupplier.get().stream().anyMatch(s -> true);
 listSupplier.get().stream().anyMatch(s -> true);

一旦使用任何操作(如map、filter或任何其他终端操作(如collect、anymatch等)访问流,您就不能像这样使用流两次,。然后您不能再次使用它,您必须将产品存储在列表中,然后使用list.stream,以便为这两个操作创建新的流

 List<SoldProduct> products = List.of(s1,s2,s3);
 Supplier<List<SoldProduct>> listSupplier
                = () -> products;
 listSupplier.get().stream().anyMatch(s -> true);
 listSupplier.get().stream().anyMatch(s -> true);

一条流不能消耗两次。您的供应商需要重新创建它:

    Supplier<Stream<SoldProduct>> streamSupplier
            = () -> Stream.of(s1,s2,s3);

一条流不能消耗两次。您的供应商需要重新创建它:

    Supplier<Stream<SoldProduct>> streamSupplier
            = () -> Stream.of(s1,s2,s3);

一个流不能使用两次。不管“对象名”应该是什么,都没有区别。仍然是相同的错误,供应商->产品总是返回相同的流对象。什么都没有。只需删除此声明以及后续的if语句。只需使用List myProducts=products.mapp->new MyProductp.getName、p.getPrice.collectCollectors.toList;代码中没有“特定处理”。当参数为null时,只有一个可疑的null处理返回null,而当流为空而没有任何需要时,更糟糕的行为返回null。仅执行collect操作将为空流提供一个空结果列表,这是合理的。在这种情况下,如果你仍然需要做特殊的手术,在那一点上仍然是可能的。如果您坚持可疑的null处理,ifproducts==null返回null;如前所述,ifproducts==null返回null;即使不建议使用编码样式,也可以使用。另外,如前所述,当您执行List myProducts=products.mapp->new MyProductp.getName、p.getPrice.collectCollectors.toList;,对于空流,没有问题,它只会计算为一个空列表,因此在空流的情况下,您想做的任何事情都可以在这之后完成,就像ifmyProducts.isEmpty{/*您的特殊操作*/}。您不能使用流两次。无论“对象名”应该是什么,都没有区别。仍然是相同的错误,供应商->产品总是返回相同的流对象。什么都没有。只需删除此声明以及后续的if语句。只需使用List myProducts=products.mapp->new MyProductp.getName、p.getPrice.collectCollectors.toList;代码中没有“特定处理”。当参数为null时,只有一个可疑的null处理返回null,而当流为空而没有任何需要时,更糟糕的行为返回null。仅执行collect操作将为空流提供一个空结果列表,这是合理的。在这种情况下,如果你仍然需要做特殊的手术,在那一点上仍然是可能的。如果您坚持可疑的null处理,ifproducts==null返回null;如前所述,ifproducts==null返回null;即使不建议使用编码样式,也可以使用。另外,如前所述,当您执行List myProducts=products.mapp->new MyProductp.getName、p.getPrice.collectCollectors.toList;,对于空流,没有问题,它只会计算为一个空列表,因此在出现空流的情况下,您想做的任何事情都可以在这之后完成,就像ifmyProducts.isEmpty{/*您的特殊操作*/}。或者,将其保留为供应商,并使用->products.stream。或者,将其保留为供应商,并使用->products.stream。