Java Stream API 终止操作的详细解析

一、终止操作概述

  • 定义:终止操作(Terminal Operations)是 Stream 处理流程的最后一步,触发流的遍历并生成结果,之后流不可再用。
  • 核心特点
    • 触发计算:中间操作(如 filtermap)在终止操作调用时才会执行。
    • 关闭流:流一旦终止,无法再执行其他操作。
    • 返回非流结果:如基本类型、对象、集合或 void

二、常见终止操作分类

1. 遍历与消费
  • forEach(Consumer)
    遍历流中的每个元素,无返回值。

    List<String> list = Arrays.asList("A", "B", "C");
    list.stream().forEach(System.out::println); // 输出 A B C
    
  • forEachOrdered(Consumer)
    在并行流中按顺序遍历元素(牺牲部分性能保证顺序)。

    list.parallelStream().forEachOrdered(System.out::println); // 顺序输出
    

2. 聚合与统计
  • count()
    返回流中元素的总数。

    long count = Stream.of(1, 2, 3).count(); // 3
    
  • max(Comparator) / min(Comparator)
    返回最大/最小元素(返回 Optional)。

    Optional<Integer> max = Stream.of(5, 2, 8).max(Integer::compare); // 8
    
  • sum() / average()
    仅适用于基本类型流(IntStreamLongStreamDoubleStream)。

    int sum = IntStream.of(1, 2, 3).sum(); // 6
    double avg = IntStream.of(1, 2, 3).average().orElse(0); // 2.0
    

3. 匹配与查找
  • anyMatch(Predicate)
    判断是否存在至少一个元素满足条件。

    boolean hasEven = Stream.of(1, 3, 5).anyMatch(n -> n % 2 == 0); // false
    
  • allMatch(Predicate)
    判断所有元素是否满足条件。

    boolean allPositive = Stream.of(1, 2, -3).allMatch(n -> n > 0); // false
    
  • noneMatch(Predicate)
    判断是否没有元素满足条件。

    boolean noEmpty = Stream.of("A", "B").noneMatch(String::isEmpty); // true
    
  • public static void main(String[] args) {
         
       //匹配person的名字是否都为”李白“
        System.out.println(PersonService.getPersons().stream().allMatch(new Predicate<Person>() {
         
            @Override
            public boolean test(Person person) {
         
                return person.getName().equals("李白");
            }
        }));
        //匹配名字是否至少有一个为”李白“
        boolean b = PersonService.getPersons().stream().anyMatch(person -> person.getName().equals("李白"));
        System.o

你可能感兴趣的:(Stream,API,java,windows)