当前位置: 首页 > 知识库问答 >
问题:

Java 8 Stream IllegalStateException:Stream已被操作或关闭

宿嘉
2023-03-14
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创建随机数量时,会引发异常。

共有1个答案

孟嘉歆
2023-03-14

答案在stream的javadoc中(强调我的):

一个流只应被操作一次(调用中间或终端流操作)。例如,这排除了“分叉”流,即相同的源提供两个或多个管道,或者相同流的多个遍历。如果流实现检测到流正在被重用,则可能引发IllegalStateException。

在您的代码中,您确实使用了两次流(一次是在createOrder()中使用,另一次是在.limit().foreach()中使用

 类似资料: