java8 stream流 所有方法并附上示例
时间: 2024-06-01 20:03:26 浏览: 89
Java 8 Stream是一种新的抽象数据类型,它允许以声明性的方式处理数据集合。它提供了一种高效、灵活和可组合的方式来处理数据。下面是Java 8 Stream中的所有方法及其示例:
1. filter()方法
该方法用于筛选符合条件的元素。它接受一个谓词函数作为参数,该函数将每个元素映射到一个布尔值。
示例:
```java
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());
System.out.println(evenNumbers); //输出[2, 4, 6, 8, 10]
```
2. map()方法
该方法用于将每个元素映射到一个新的元素。它接受一个函数作为参数,该函数将每个元素映射到一个新的元素。
示例:
```java
List<String> words = Arrays.asList("hello", "world", "java", "stream");
List<Integer> wordLengths = words.stream()
.map(String::length) //映射成字符串长度
.collect(Collectors.toList());
System.out.println(wordLengths); //输出[5, 5, 4, 6]
```
3. flatMap()方法
该方法用于将每个元素映射到一个流,然后将所有流的元素合并成一个流。它接受一个函数作为参数,该函数将每个元素映射到一个流。
示例:
```java
List<List<Integer>> numbers = Arrays.asList(Arrays.asList(1, 2), Arrays.asList(3, 4), Arrays.asList(5, 6));
List<Integer> allNumbers = numbers.stream()
.flatMap(List::stream) //合并所有元素
.collect(Collectors.toList());
System.out.println(allNumbers); //输出[1, 2, 3, 4, 5, 6]
```
4. forEach()方法
该方法用于对每个元素执行指定的操作。它接受一个消费者函数作为参数,该函数将每个元素作为输入。
示例:
```java
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
numbers.stream().forEach(System.out::println); //逐个输出
```
5. reduce()方法
该方法用于将所有元素合并成一个值。它接受一个二元操作函数作为参数,该函数将两个元素合并成一个。
示例:
```java
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = numbers.stream().reduce(0, Integer::sum); //求和
System.out.println(sum); //输出15
```
6. collect()方法
该方法用于将流的元素收集到一个集合中。它接受一个收集器作为参数,该收集器将流的元素收集到一个集合中。
示例:
```java
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> evenNumbers = numbers.stream()
.filter(n -> n % 2 == 0) //筛选偶数
.collect(Collectors.toList());
System.out.println(evenNumbers); //输出[2, 4]
```
7. count()方法
该方法用于计算流中元素的数量。
示例:
```java
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
long count = numbers.stream().count(); //计算元素数量
System.out.println(count); //输出5
```
8. distinct()方法
该方法用于去除流中重复的元素。
示例:
```java
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 5, 4, 3, 2, 1);
List<Integer> distinctNumbers = numbers.stream()
.distinct() //去重
.collect(Collectors.toList());
System.out.println(distinctNumbers); //输出[1, 2, 3, 4, 5]
```
9. sorted()方法
该方法用于对流中的元素进行排序。它接受一个比较器函数作为参数,该函数将两个元素进行比较。
示例:
```java
List<Integer> numbers = Arrays.asList(5, 4, 3, 2, 1);
List<Integer> sortedNumbers = numbers.stream()
.sorted() //排序
.collect(Collectors.toList());
System.out.println(sortedNumbers); //输出[1, 2, 3, 4, 5]
```
10. peek()方法
该方法用于对流中的每个元素执行指定的操作,同时保留原始元素。它接受一个消费者函数作为参数,该函数将每个元素作为输入。
示例:
```java
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> evenNumbers = numbers.stream()
.peek(System.out::println) //逐个输出元素
.filter(n -> n % 2 == 0) //筛选偶数
.collect(Collectors.toList());
System.out.println(evenNumbers); //输出[2, 4]
```
阅读全文