stream流常见方法
在 Spring Boot 项目开发中,Java 8 引入的 Stream 流提供了很多强大且常用的方法,以下是一些主要的:
**一、过滤方法**
1. `filter(Predicate<? super T> predicate)`:用于筛选出满足给定条件的元素。
- 示例:
```java List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6); List<Integer> evenNumbers = numbers.stream() .filter(n -> n % 2 == 0) .collect(Collectors.toList()); // evenNumbers 为 [2, 4, 6]
**二、映射方法**
1. `map(Function<? super T,? extends R> mapper)`:将流中的每个元素通过给定的函数进行转换。
- 示例:
List<String> words = Arrays.asList("apple", "banana", "cherry");
List<Integer> wordLengths = words.stream()
.map(String::length) .collect(Collectors.toList()); // wordLengths 为 [5, 6, 6]
**三、排序方法**
1. `sorted()`:对元素进行自然排序。如果元素是自定义对象,需要实现 `Comparable` 接口。
2. `sorted(Comparator<? super T> comparator)`:使用自定义的比较器进行排序。
- 示例:
List<Integer> numbers = Arrays.asList(5, 2, 8, 1, 4);
List<Integer> sortedNumbers = numbers.stream()
.sorted()
.collect(Collectors.toList()); // sortedNumbers 为 [1, 2, 4, 5, 8]
**四、聚合方法**
1. `count()`:返回流中元素的数量。
- 示例:
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
long count = numbers.stream().count(); // count 为 5 ```
//min(Comparator<? super T> comparator)`和`max(Comparator<? super T> comparator)`:
//分别返回流中的最小元素和最大元素。
//- 示例:
List<Integer> numbers = Arrays.asList(5, 2, 8, 1, 4);
Optional<Integer> minNumber = numbers.stream()
.min(Integer::compareTo);
Optional<Integer> maxNumber = numbers.stream()
.max(Integer::compareTo);
// minNumber 为 Optional[1],maxNumber 为 Optional[8]
//3. `reduce(BinaryOperator<T> accumulator)`:将流中的元素进行归约操作,得到一个单一的结果。
//- 示例:
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
Optional<Integer> sum = numbers.stream()
.reduce((a, b) -> a + b); // sum 为 Optional[15]
**五、遍历方法**
1. `forEach(Consumer<? super T> action)`:对流中的每个元素执行给定的操作。
- 示例:
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
numbers.stream()
.forEach(System.out::println); // 打印 1 2 3 4 5
**六、去重方法**
1. `distinct()`:去除流中的重复元素。
- 示例:
List<Integer> numbers = Arrays.asList(1, 2, 2, 3, 4, 4, 5);
List<Integer> distinctNumbers = numbers.stream()
.distinct()
.collect(Collectors.toList()); // distinctNumbers 为 [1, 2, 3, 4, 5]