www. On IT Road .com
解决方案
首先,任何需要多次遍历流的实现代码都不是高效代码,需要重构。
但是在测试时,我们可能想创建源并多次获取流的用例。
在这种情况下,我们可以使用 stream() 方法或者只是创建一个新的 stream 。
import java.util.Arrays; import java.util.List; import java.util.Optional; public class Main { public static void main(String[] args) { List<Integer> tokens = Arrays.asList(1, 2, 3, 4, 5); // 第1次使用 Optional<Integer> result = tokens.stream().max(Integer::compareTo); System.out.println(result.get()); // 第2次使用 result = tokens.stream().min(Integer::compareTo); System.out.println(result.get()); // 第3次使用 long count = tokens.stream().count(); System.out.println(count); } }
在Java 流一旦被消费,就不能重用。
Java 文档:
“一个流应该只被操作一次(调用一个中间或者终端流操作)。
例如,这排除了“分叉”流,其中相同的源提供两个或者多个管道,或者同一流的多次遍历。
A如果流实现检测到流正在被重用,它可能会抛出IllegalStateException
.”
所以,我们不能多次使用(遍历)流
日期:2020-09-17 00:10:06 来源:oir作者:oir