MST
星途 面试题库

面试题:Java中Java Stream终止操作的常见触发条件有哪些

请简述在Java Stream中,终止操作会在哪些常见的情况下被触发,并分别举例说明,比如count()、collect()这类终止操作触发的场景。
32.1万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试
  1. 计算元素数量
    • 触发场景:当需要知道流中元素的个数时,会触发count()终止操作。
    • 示例
import java.util.stream.Stream;

public class StreamCountExample {
    public static void main(String[] args) {
        long count = Stream.of(1, 2, 3, 4, 5).count();
        System.out.println("元素个数: " + count);
    }
}
  1. 收集结果到集合或其他数据结构
    • 触发场景:当需要将流处理的结果收集到集合(如ListSet)或其他数据结构中时,会触发collect()终止操作。
    • 示例
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class StreamCollectExample {
    public static void main(String[] args) {
        List<Integer> list = Stream.of(1, 2, 3, 4, 5).collect(Collectors.toList());
        System.out.println("收集到的列表: " + list);
    }
}
  1. 查找匹配元素
    • 触发场景
      • findFirst():当需要找到流中的第一个元素时触发。常用于在有序流中获取第一个满足某些条件的元素。
      • findAny():当需要找到流中的任意一个元素时触发。在并行流中,它可能返回第一个找到的元素,但不一定是流的第一个元素。
    • 示例
import java.util.Optional;
import java.util.stream.Stream;

public class StreamFindExample {
    public static void main(String[] args) {
        Optional<Integer> first = Stream.of(1, 2, 3, 4, 5).findFirst();
        first.ifPresent(System.out::println);

        Optional<Integer> any = Stream.of(1, 2, 3, 4, 5).parallel().findAny();
        any.ifPresent(System.out::println);
    }
}
  1. 判断流中是否存在匹配元素
    • 触发场景
      • anyMatch(Predicate<? super T> predicate):当需要判断流中是否至少有一个元素满足给定条件时触发。
      • allMatch(Predicate<? super T> predicate):当需要判断流中所有元素是否都满足给定条件时触发。
      • noneMatch(Predicate<? super T> predicate):当需要判断流中是否没有元素满足给定条件时触发。
    • 示例
import java.util.stream.Stream;

public class StreamMatchExample {
    public static void main(String[] args) {
        boolean anyMatch = Stream.of(1, 2, 3, 4, 5).anyMatch(n -> n > 3);
        boolean allMatch = Stream.of(1, 2, 3, 4, 5).allMatch(n -> n > 0);
        boolean noneMatch = Stream.of(1, 2, 3, 4, 5).noneMatch(n -> n < 0);

        System.out.println("是否至少有一个元素大于3: " + anyMatch);
        System.out.println("是否所有元素都大于0: " + allMatch);
        System.out.println("是否没有元素小于0: " + noneMatch);
    }
}
  1. 归约操作
    • 触发场景:当需要将流中的元素组合起来生成一个值时,会触发归约操作,如reduce()。它可以用于求和、求积等。
    • 示例
import java.util.Optional;
import java.util.stream.Stream;

public class StreamReduceExample {
    public static void main(String[] args) {
        Optional<Integer> sum = Stream.of(1, 2, 3, 4, 5).reduce((a, b) -> a + b);
        sum.ifPresent(System.out::println);

        int product = Stream.of(1, 2, 3, 4, 5).reduce(1, (a, b) -> a * b);
        System.out.println("乘积: " + product);
    }
}