详细介绍一下java中stream的相关常用方法,最好举例子说明
时间: 2023-10-26 20:12:42 浏览: 106
Java Stream 详解
Java 8 中的 Stream 是一个用于处理集合数据的 API,它允许我们在集合中进行过滤、映射、聚合等操作,可以简化代码并提高代码的可读性。下面是一些常用的 Stream 方法:
1. `filter(Predicate<T> predicate)`:过滤集合中不符合条件的元素,返回一个新的 Stream。例如:
```
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]`。
2. `map(Function<T, R> mapper)`:将集合中的元素按照指定的映射关系进行转换,返回一个新的 Stream。例如:
```
List<String> words = Arrays.asList("hello", "world");
List<Integer> wordLengths = words.stream()
.map(String::length)
.collect(Collectors.toList());
```
这将得到一个包含单词长度的新列表 `[5, 5]`。
3. `flatMap(Function<T, Stream<R>> mapper)`:将集合中的元素按照指定的映射关系进行扁平化处理,返回一个新的 Stream。例如:
```
List<List<Integer>> numbers = Arrays.asList(Arrays.asList(1, 2), Arrays.asList(3, 4));
List<Integer> flattenedNumbers = numbers.stream()
.flatMap(Collection::stream)
.collect(Collectors.toList());
```
这将得到一个包含所有数字的新列表 `[1, 2, 3, 4]`。
4. `reduce(T identity, BinaryOperator<T> accumulator)`:将集合中的元素按照指定的聚合规则进行合并,返回一个 Optional 对象。例如:
```
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
Optional<Integer> sum = numbers.stream()
.reduce((x, y) -> x + y);
```
这将得到一个包含所有数字之和的 Optional 对象。
5. `collect(Collector<T, A, R> collector)`:将集合中的元素按照指定的收集器进行汇总,返回一个新的集合或 Map 等。例如:
```
List<String> words = Arrays.asList("hello", "world", "java");
Map<Integer, List<String>> groups = words.stream()
.collect(Collectors.groupingBy(String::length));
```
这将得到一个 Map,其中键为单词长度,值为该长度下的所有单词。在本例中,结果为 `{5=[hello, world], 4=[java]}`。
这些方法是 Stream 中常用的一些方法,它们可以帮助我们更方便地处理集合数据。
阅读全文