流短路与并发流
并发流
自动将流操作分配到多个线程上执行,以利用多核 CPU 的性能优势。
创建并发流
parallelStream()parallel()
从集合创建
java
List<String> list = Arrays.asList("a", "b", "c", "d", "e");
// 方法1:使用 parallelStream()
List<String> result = list.parallelStream()
.map(String::toUpperCase)
.collect(Collectors.toList());
// 方法2:将顺序流转为并行流
List<String> result = list.stream()
.parallel() // 转换为并行流
.map(String::toUpperCase)
.collect(Collectors.toList());
// 方法3:从数组创建
int[] array = {1, 2, 3, 4, 5};
IntStream parallelIntStream = Arrays.stream(array).parallel();生成并发流
java
// 生成无限并发流
Stream<Double> randomStream = Stream.generate(Math::random)
.parallel()
.limit(1000);
// 迭代生成并发流
Stream<Integer> evenNumbers = Stream.iterate(0, n -> n + 2)
.parallel()
.limit(100);短路流
指在某些操作中,当满足特定条件时,流处理会提前终止,不再处理剩余元素。
java
// 非短路操作:必须处理所有元素
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
long count = numbers.stream()
.map(n -> {
System.out.println("处理: " + n);
return n * 2;
})
.count();
// 输出: 处理: 1, 处理: 2, 处理: 3, 处理: 4, 处理: 5
// 必须处理完所有元素才知道数量
// 短路操作:可能提前终止
boolean found = numbers.stream()
.map(n -> {
System.out.println("处理: " + n);
return n * 2;
})
.anyMatch(n -> n > 6);
// 输出: 处理: 1, 处理: 2, 处理: 3
// 当找到4(3×2=6)后,条件满足,停止处理
朔风