w*********n 发帖数: 439 | 1 有一个main方法如下:
public static void main(String[] args) {
Stream nums = Stream.of(1, 2, 3, 4, 5);
nums.filter(n -> n % 2 == 1);
nums.forEach(p -> System.out.print(p));
}
运行这个main方法时抛 java.lang.IllegalStateException: stream has already
been operated upon or closed
请问第二句filter 和第三句 forEach 相互独立,并没有关闭nums这个Stream,
怎么会抛异常呢? | w*********n 发帖数: 439 | 2 有一个main方法如下:
public static void main(String[] args) {
Stream nums = Stream.of(1, 2, 3, 4, 5);
nums.filter(n -> n % 2 == 1);
nums.forEach(p -> System.out.print(p));
}
运行这个main方法时抛 java.lang.IllegalStateException: stream has already
been operated upon or closed
请问第二句filter 和第三句 forEach 相互独立,并没有关闭nums这个Stream,
怎么会抛异常呢? | b******7 发帖数: 123 | 3 可以理解为stream 有个内部指针,所以只能被使用一次。 | k*********s 发帖数: 4474 | 4 二三不是独立的
如果按你这个写法要重新stream | b******7 发帖数: 123 | 5 可以理解为stream 有个内部指针,所以只能被使用一次。 | k*********s 发帖数: 4474 | 6 二三不是独立的。因为lambda 用delayed execution
如果按你这个写法要重新stream | A******e 发帖数: 6 | 7 应该这样写就好了, nums.filter(n -> n % 2 == 1) 这一行return了一个新的stream.
public static void main(String[] args) {
Stream nums = Stream.of(1, 2, 3, 4, 5);
nums = nums.filter(n -> n % 2 == 1);
nums.forEach(p -> System.out.print(p));
} | A******e 发帖数: 6 | 8 应该这样写就好了, nums.filter(n -> n % 2 == 1) 这一行return了一个新的stream.
public static void main(String[] args) {
Stream nums = Stream.of(1, 2, 3, 4, 5);
nums = nums.filter(n -> n % 2 == 1);
nums.forEach(p -> System.out.print(p));
} |
|