Java 中的 Stream 流提供了许多中间操作,用于对流中的元素进行处理和转换。下面是一些常见的中间操作及其详细解释说明:

  1. filter(Predicate<T> predicate):过滤流中的元素,只保留满足条件的元素。 例如:
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> evenNumbers = numbers.stream()
                                   .filter(n -> n % 2 == 0)
                                   .collect(Collectors.toList());
// evenNumbers = [2, 4]
  1. map(Function<T, R> mapper):对流中的每个元素应用指定的函数,并将结果映射为一个新的流。 例如:
List<String> names = Arrays.asList('John', 'Jane', 'Bob');
List<Integer> nameLengths = names.stream()
                                 .map(String::length)
                                 .collect(Collectors.toList());
// nameLengths = [4, 4, 3]
  1. sorted():对流中的元素进行排序,默认是自然排序。 例如:
List<Integer> numbers = Arrays.asList(3, 1, 2, 5, 4);
List<Integer> sortedNumbers = numbers.stream()
                                     .sorted()
                                     .collect(Collectors.toList());
// sortedNumbers = [1, 2, 3, 4, 5]
  1. distinct():去除流中的重复元素。 例如:
List<Integer> numbers = Arrays.asList(1, 2, 2, 3, 3, 3);
List<Integer> distinctNumbers = numbers.stream()
                                       .distinct()
                                       .collect(Collectors.toList());
// distinctNumbers = [1, 2, 3]
  1. limit(long maxSize):截断流,只保留前面指定数量的元素。 例如:
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> limitedNumbers = numbers.stream()
                                      .limit(3)
                                      .collect(Collectors.toList());
// limitedNumbers = [1, 2, 3]
  1. skip(long n):跳过前面指定数量的元素,返回剩余的元素。 例如:
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> skippedNumbers = numbers.stream()
                                      .skip(2)
                                      .collect(Collectors.toList());
// skippedNumbers = [3, 4, 5]
  1. peek(Consumer<T> action):对流中的每个元素应用指定的消费者函数,并返回原始流。 例如:
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> doubledNumbers = numbers.stream()
                                      .peek(n -> System.out.println('Doubling ' + n))
                                      .map(n -> n * 2)
                                      .collect(Collectors.toList());
// doubledNumbers = [2, 4, 6, 8, 10]

这些中间操作可以根据具体的需求进行组合和使用,以实现对流的灵活处理和转换。

Java Stream 中间操作详解:带示例代码

原文地址: https://www.cveoy.top/t/topic/mvzq 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录