Skip to content
章节导航

流短路与并发流

并发流

自动将流操作分配到多个线程上执行,以利用多核 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)后,条件满足,停止处理