1、map(Student::getStuName).distinct() 集合中对象是否存在某个字段重复
// map(Student::getStuName).distinct() 集合中对象是否存在某个字段重复
List<Student> studentList = new ArrayList<>();
studentList.add(new Student(1,"张三"));
studentList.add(new Student(2,"李四"));
studentList.add(new Student(3,"张三"));
// map获取某字段,与distinct().count结合,判断是否存在重复
long count = studentList.stream().map(Student::getStuName).distinct().count();
if (count != studentList.size()) {
System.out.println("存在重复stuName的student");
}
输出结果
存在重复stuName的student
2、Collectors.toMap 获取集合中重复的对象
// Collectors.toMap 获取集合中重复的对象
studentList = new ArrayList<>();
Student zhangSan = new Student(1,"张三");
studentList.add(zhangSan);
studentList.add(new Student(2,"李四"));
studentList.add(zhangSan);
// 将studentList转成Map,Student为key,初始val为1,如果key相同则val相加
// 刷选出val大于1的,输出key,即为重复的student
List<Student> collectStu = studentList.stream()
.collect( Collectors.toMap( key -> key, val -> 1, (a, b) -> a + b) )
.entrySet().stream()
.filter(entry -> entry.getValue() > 1)
.map(entry -> entry.getKey())
.collect(Collectors.toList());
System.out.println(collectStu.toString());
输出结果
[stuName:张三,stuNumber:1]
3、mapToInt(List::size) 嵌套集合的数量是否一致
List<Grade> gradeList = new ArrayList<>();
studentList = new ArrayList<>();
studentList.add(new Student(1,"张三"));
studentList.add(new Student(2,"李四"));
studentList.add(new Student(3,"王五"));
gradeList.add(new Grade(studentList,"Freshman"));
studentList = new ArrayList<>();
studentList.add(new Student(1,"张三"));
studentList.add(new Student(2,"李四"));
gradeList.add(new Grade(studentList,"Sophomore"));
count = gradeList.stream()
.map(Grade::getStudentList)
.mapToInt(List::size)
.distinct()
.count();
if (count > 1) {
System.out.println("Grade中存在studentList数量不一致");
}
输出结果
Grade中存在studentList数量不一致
4、flatMap,获取嵌套集合中的某个字段
collectStu = gradeList.stream()
.flatMap(grade -> grade.getStudentList().stream())
.filter(student -> "张三".equals(student.getStuName()))
.collect(Collectors.toList());
System.out.println(collectStu.toString());
输出结果
[stuName:张三,stuNumber:1, stuName:张三,stuNumber:1]
实体类定义
public static class Student{
int stuNumber;
String stuName;
Student(int stuNumber,String stuName){
this.stuName = stuName;
this.stuNumber = stuNumber;
}
public String getStuName() {
return stuName;
}
public int getStuNumber() {
return stuNumber;
}
public String toString() {
return "stuName:"+ this.stuName+",stuNumber:"+this.getStuNumber();
}
}
public static class Grade {
List<Student> studentList;
String gradeName;
Grade(List<Student> studentList,String gradeName) {
this.gradeName = gradeName;
this.studentList = studentList;
}
public List<Student> getStudentList() {
return studentList;
}
public String getGradeName() {
return gradeName;
}
public String toString() {
return this.gradeName+":"+this.studentList.toString();
}
}