private DoubleStream doubleStream = new Random().doubles(50.0, 200.0);
private Order createOrder() {
return new Order(doubleStream.findFirst().getAsDouble());
}
@Test
public void test() {
Stream<Order> orderStream = Stream.generate(() -> {
return createOrder();
});
orderStream.limit(10).forEach(System.out::println);
如果我使用literal(1.0)初始化Order实例,那么这很好。当我使用doubleStream创建随机数量时,会引发异常。
答案在stream
的javadoc中(强调我的):
一个流只应被操作一次(调用中间或终端流操作)。例如,这排除了“分叉”流,即相同的源提供两个或多个管道,或者相同流的多个遍历。如果流实现检测到流正在被重用,则可能引发IllegalStateException。
在您的代码中,您确实使用了两次流(一次是在createOrder()
中使用,另一次是在.limit().foreach()
中使用
方法是 现在我试着像这样改成stream,但我不知道这种改是否正确: 如何避免出现例外,解决问题? 我应该以某种方式重构代码吗?
使用java8将对象的某个字段值与“_”连接起来。代码中的最后一行抛出一个“”。
问题内容: 我正在尝试使用Stream API生成Order实例。我有一个创建订单的工厂函数,并且使用DoubleStream初始化订单金额。 如果我使用文字(1.0)初始化Order实例,则可以正常工作。当我使用doubleStream创建随机数量时,将引发异常。 问题答案: 答案在(重点是我的)的javadoc中: 流仅应操作一次(调用中间流或终端流操作) 。例如,这排除了“分叉”流,其中相同
下面是我的代码: 从下面的函数调用上面的函数: 我不知道为什么。
我想复制一个Java8流,这样我可以处理它两次。我可以