不说废话,直入正题.如果对您有帮助,希望点赞关注好评三连......
实体类:
@Data
public class Student {
private String id;
private String name;
private Integer age ;
public Student(String id, String name, Integer age) {
this.id = id;
this.name = name;
this.age = age;
}
}
1.list<对象>转set,获取对象某一属性的集合,并去重.
List<Student> list = new ArrayList<>();
list.add(new Student("4", "张三", 20));
list.add(new Student("3", "李四", 18));
list.add(new Student("2", "王五", 17));
list.add(new Student("2", "赵六", 19));
Set<String> collect =
list.stream().map(Student::getId).collect(Collectors.toSet());
System.out.println(collect);
打印结果为:
[2, 3, 4]
2.list<对象> 转map<String,Object>,key是实体类中的某一属性,value是对象本身,如果有两个重复的key,则取第一个.
List<Student> list = new ArrayList<>();
list.add(new Student("4", "张三", 20));
list.add(new Student("3", "张三", 18));
list.add(new Student("2", "王五", 17));
list.add(new Student("2", "赵六", 19));
Map<String, Object> map =
list.stream().
collect(Collectors.toMap(Student::getName, Function.identity(), (k1, k2) -> k1));
//将map转换成成entrySet方便您直观查看结果
Set<Map.Entry<String, Object>> entries = map.entrySet();
for (Map.Entry<String, Object> entry : entries) {
System.out.println(entry);
}
打印结果:
张三=Student(id=4, name=张三, age=20)
王五=Student(id=2, name=王五, age=17)
赵六=Student(id=2, name=赵六, age=19)
3.List<对象>转Map<String,List<对象>>,key是根据对象的某一属性分组过后的(比如name都是''张三''),List则是name都是张三的集合.
List<Student> list = new ArrayList<>();
list.add(new Student("4", "张三", 20));
list.add(new Student("3", "王五", 18));
list.add(new Student("2", "王五", 17));
list.add(new Student("2", "张三", 19));
Map<String,List<Student>> map = list.stream().collect(Collectors.groupingBy(Student::getName));
//将map转换成成entrySet方便您直观查看结果
Set<Map.Entry<String, List<Student>>> entries = map.entrySet();
for (Map.Entry<String, List<Student>> entry : entries) {
System.out.println(entry);
}
打印结果:
张三=[Student(id=4, name=张三, age=20), Student(id=2, name=张三, age=19)]
王五=[Student(id=3, name=王五, age=18), Student(id=2, name=王五, age=17)]
4.map转list<对象>
Map<String, String> map = new HashMap<>();
map.put("1", "张三");
map.put("2", "李四");
map.put("3", "王五");
map.put("4", "赵六");
//这里用到箭头函数,lambda表达式
List<Student> list = map.entrySet().stream().
map(e -> {
Student student = new Student();
student.setId(e.getKey());
student.setName(e.getValue());
return student;
}).collect(Collectors.toList());
for (Student student : list) {
System.out.println(student);
}
//打印结果:
Student(id=1, name=张三, age=null)
Student(id=2, name=李四, age=null)
Student(id=3, name=王五, age=null)
Student(id=4, name=赵六, age=null)
5.用stream实现计算list的指定某个属性值的个数
List<Student> list = new ArrayList<>();
list.add(new Student("4", "张三", 20));
list.add(new Student("3", "王五", 18));
list.add(new Student("2", "王五", 20));
list.add(new Student("2", "赵六", 20));
long count = list.stream().
filter(Student -> Objects.equals(Student.getAge(), 20)).count();
System.out.println(count);
打印结果:
3