Java Stream API 常用方法详解:过滤、映射、排序、收集等
Java 中的 Stream 类提供了一套强大的方法来处理集合数据,简化了数据操作的代码,提高了代码可读性和可维护性。以下是 Stream API 中一些常用的方法,并附带示例代码说明:
- filter(Predicate
predicate) :过滤掉不满足条件的元素。
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
List<Integer> evenNumbers = numbers.stream()
.filter(n -> n % 2 == 0)
.collect(Collectors.toList());
- map(Function<T, R> mapper):将每个元素映射为另一个元素。
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
List<String> upperCaseNames = names.stream()
.map(String::toUpperCase)
.collect(Collectors.toList());
- flatMap(Function<T, Stream
> mapper) :将每个元素映射为一个流,并将所有流合并为一个流。
List<List<String>> nestedLists = Arrays.asList(Arrays.asList("a", "b"), Arrays.asList("c", "d"));
List<String> flattenedList = nestedLists.stream()
.flatMap(List::stream)
.collect(Collectors.toList());
- distinct():去除重复的元素。
List<Integer> numbers = Arrays.asList(1, 2, 2, 3, 3, 3, 4, 4, 4, 5);
List<Integer> distinctNumbers = numbers.stream()
.distinct()
.collect(Collectors.toList());
- sorted():对流中的元素进行排序。
List<Integer> numbers = Arrays.asList(5, 2, 8, 1, 9, 3);
List<Integer> sortedNumbers = numbers.stream()
.sorted()
.collect(Collectors.toList());
- peek(Consumer
action) :对每个元素执行操作,不影响流中的元素。
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> numbersWithLog = numbers.stream()
.peek(n -> System.out.println("Processing: " + n))
.collect(Collectors.toList());
- limit(long maxSize):截断流,使其最多包含指定数量的元素。
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
List<Integer> firstThreeNumbers = numbers.stream()
.limit(3)
.collect(Collectors.toList());
- skip(long n):跳过流中的前n个元素。
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
List<Integer> numbersAfterFirstTwo = numbers.stream()
.skip(2)
.collect(Collectors.toList());
- forEach(Consumer
action) :对每个元素执行操作。
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
numbers.stream().forEach(System.out::println);
- toArray():将流中的元素转换为数组。
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
Integer[] numberArray = numbers.stream().toArray(Integer[]::new);
- reduce(BinaryOperator
accumulator) :将流中的元素依次进行归约操作。
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
Integer sum = numbers.stream().reduce(0, Integer::sum);
- collect(Collector<T, A, R> collector):将流中的元素收集到一个容器中。
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
Set<Integer> numberSet = numbers.stream().collect(Collectors.toSet());
- count():返回流中的元素数量。
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
long count = numbers.stream().count();
- anyMatch(Predicate
predicate) :检查流中是否有任意一个元素满足条件。
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
boolean hasEvenNumber = numbers.stream().anyMatch(n -> n % 2 == 0);
- allMatch(Predicate
predicate) :检查流中的所有元素是否都满足条件。
List<Integer> numbers = Arrays.asList(1, 3, 5, 7, 9);
boolean allOddNumbers = numbers.stream().allMatch(n -> n % 2 != 0);
- noneMatch(Predicate
predicate) :检查流中是否没有任何元素满足条件。
List<Integer> numbers = Arrays.asList(1, 3, 5, 7, 9);
boolean noEvenNumbers = numbers.stream().noneMatch(n -> n % 2 == 0);
- findFirst():返回流中的第一个元素。
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
Optional<Integer> firstNumber = numbers.stream().findFirst();
- findAny():返回流中的任意一个元素。
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
Optional<Integer> anyNumber = numbers.stream().findAny();
- min(Comparator
comparator) :返回流中的最小元素。
List<Integer> numbers = Arrays.asList(5, 2, 8, 1, 9, 3);
Optional<Integer> minNumber = numbers.stream().min(Integer::compareTo);
- max(Comparator
comparator) :返回流中的最大元素。
List<Integer> numbers = Arrays.asList(5, 2, 8, 1, 9, 3);
Optional<Integer> maxNumber = numbers.stream().max(Integer::compareTo);
以上只是一些常用的 Stream 方法,Stream 类还提供了许多其他方法,可以根据具体需求选择使用。Stream API 提供了简洁、高效的代码,可以帮助您轻松处理集合数据。
原文地址: https://www.cveoy.top/t/topic/mgRP 著作权归作者所有。请勿转载和采集!