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 流一旦被消费,就不能重用。

Java 文档:
“一个流应该只被操作一次(调用一个中间或者终端流操作)。
例如,这排除了“分叉”流,其中相同的源提供两个或者多个管道,或者同一流的多次遍历。
A如果流实现检测到流正在被重用,它可能会抛出IllegalStateException.”

所以,我们不能多次使用(遍历)流

日期:2020-09-17 00:10:06 来源:oir作者:oir