我正在尝试使用Stream API生成Order实例。我有一个创建订单的工厂函数,并且使用DoubleStream初始化订单金额。
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);
如果我使用文字(1.0)初始化Order实例,则可以正常工作。当我使用doubleStream创建随机数量时,将引发异常。
答案在Stream(重点是我的)的javadoc中:
Stream
流仅应操作一次(调用中间流或终端流操作) 。例如,这排除了“分叉”流,其中相同的源提供了两个或多个管道,或同一流的多次遍历。 如果流实现检测到正在重用该流,则可能抛出IllegalStateException 。
在您的代码中,您确实使用了两次流(一次,createOrder()另一次使用.limit().forEach()
createOrder()
.limit().forEach()