什么是stream
Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。
实战
首先定义一个bean -> Teacher(教师)待会使用
//教师
public class Teacher {
private String id;
private String name;
private String birthPlace;
private int age;
public Teacher() {
}
public Teacher(String id, String name) {
this.id = id;
this.name = name;
}
}
- list< Teacher> 中出生地点在北京的教师,数据筛选 filter()
list.stream().filter(v -> "北京".equals(v.getBirthPlace())).collect(Collectors.toList());
- 把List< Teacher > 转换成 Map< Id,name>类型
//(a,b)->b 当出现重复key值时,会使用替换策略
list.stream().collect(Collectors.toMap(Teacher::getId,Teacher::getName,(a,b)->b));
- list< Teacher> 转换成list< age> 类型转换 map
list.stream().map(v-> v.getAge()).collect(Collectors.toList());
- list< ?>去重复数据
list.stream().distinct().collect(Collectors.toList());
碰到的异常
- java.lang.IllegalStateException: Duplicate key
Collectors.toMap(k,v)里面的k有重复数据,所以触发了异常
解决方案:
1.处理的list集合去掉重复数据;
2.替换策略Collectors.toMap(k,v,(a,b)->b)