集合中stream的使用
时间: 2023-08-29 20:06:01 浏览: 96
在Java 8中,集合类(如List、Set、Map等)新增了stream()方法,通过该方法可以创建一个流(Stream)对象,使用流式编程的方式对集合进行处理。stream()方法返回一个顺序流,如果需要并行处理集合,可以使用parallelStream()方法返回一个并行流。
使用流式编程可以使代码更简洁、易读,并且在处理大量数据时,可以提高程序的性能。
下面是一些常用的stream的使用方式:
1. 过滤数据:
```
List<String> list = Arrays.asList("apple", "banana", "orange", "pear");
list.stream().filter(s -> s.startsWith("a")).forEach(System.out::println); // 输出 "apple"
```
2. 转换数据:
```
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
list.stream().map(i -> i * i).forEach(System.out::println); // 输出 "1 4 9 16 25"
```
3. 排序数据:
```
List<Integer> list = Arrays.asList(5, 3, 4, 1, 2);
list.stream().sorted().forEach(System.out::println); // 输出 "1 2 3 4 5"
```
4. 去重数据:
```
List<Integer> list = Arrays.asList(1, 2, 1, 3, 2, 4, 5);
list.stream().distinct().forEach(System.out::println); // 输出 "1 2 3 4 5"
```
5. 统计数据:
```
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
long count = list.stream().count(); // 统计集合中元素的数量
int max = list.stream().max(Integer::compareTo).get(); // 找出集合中的最大值
int min = list.stream().min(Integer::compareTo).get(); // 找出集合中的最小值
int sum = list.stream().mapToInt(Integer::intValue).sum(); // 计算集合中所有元素的总和
double ave = list.stream().mapToInt(Integer::intValue).average().getAsDouble(); // 计算集合中所有元素的平均数
```
6. 对数据进行分组:
```
List<Person> list = Arrays.asList(
new Person("Tom", "male", 20),
new Person("Lucy", "female", 18),
new Person("Jack", "male", 22),
new Person("Lily", "female", 19)
);
Map<String, List<Person>> map = list.stream().collect(Collectors.groupingBy(Person::getGender));
// 将集合中的Person对象按照性别进行分组,结果为 {male=[Person(name=Tom, gender=male, age=20), Person(name=Jack, gender=male, age=22)], female=[Person(name=Lucy, gender=female, age=18), Person(name=Lily, gender=female, age=19)]}
```
以上仅是stream的一些常用使用方式,Stream提供了更多的API,可以根据需求进行选择。
阅读全文