Java 8 中的 Stream API 提供了一种更加函数式和便捷的方式来处理集合数据。以下是一些常用的 Stream 方法,以及它们的简要说明和对应的例子。
-
filter(Predicate):根据指定的条件过滤集合中的元素。
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5); List<Integer> evenNumbers = numbers.stream().filter(n -> n % 2 == 0).collect(Collectors.toList()); // 输出结果为 [2, 4]
-
map(Function):对集合中的每个元素进行映射转换。
List<String> words = Arrays.asList("hello", "world", "java"); List<Integer> wordLengths = words.stream().map(String::length).collect(Collectors.toList()); // 输出结果为 [5, 5, 4]
-
flatMap(Function):将多个 Stream 合并成一个 Stream。
List<List<Integer>> nestedNumbers = Arrays.asList(Arrays.asList(1, 2),Arrays.asList(3, 4),Arrays.asList(5, 6) ); List<Integer> allNumbers = nestedNumbers.stream().flatMap(List::stream).collect(Collectors.toList()); // 输出结果为 [1, 2, 3, 4, 5, 6]
-
distinct():去除集合中的重复元素。
List<Integer> numbers = Arrays.asList(1, 2, 3, 3, 4, 4, 5); List<Integer> distinctNumbers = numbers.stream().distinct().collect(Collectors.toList()); // 输出结果为 [1, 2, 3, 4, 5]
-
sorted():对集合中的元素进行排序。
List<Integer> numbers = Arrays.asList(3, 1, 4, 1, 5, 9, 2, 6); List<Integer> sortedNumbers = numbers.stream().sorted().collect(Collectors.toList()); // 输出结果为 [1, 1, 2, 3, 4, 5, 6, 9]
-
limit(long):限制 Stream 的大小。
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); List<Integer> limitedNumbers = numbers.stream().limit(5).collect(Collectors.toList()); // 输出结果为 [1, 2, 3, 4, 5]
-
skip(long):跳过指定数量的元素。
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); List<Integer> skippedNumbers = numbers.stream().skip(5).collect(Collectors.toList()); // 输出结果为 [6, 7, 8, 9, 10]
-
reduce():通过指定的操作对元素进行归约。
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5); Optional<Integer> sum = numbers.stream().reduce((a, b) -> a + b); // 输出结果为 15
这些只是 Stream API 中的一部分方法,但是它们是最常用的方法之一。