对list对象集合按照条件分组

对list对象集合按照条件分组

  • 使用场景
    • 使用mysql数据库操作
    • 使用map实现

使用场景

一个学校有十个专业,每个专业有若干学生,现在我们拿到全校学生对象的list集合,按专业和年级分组统计学生数量

使用mysql数据库操作

假设有学生表:student;有字段:id, name, age, subject(专业), grade(年级)
可以使用sql:select sugject, grade, count(*) as num from student group by subject,grade;

使用map实现

创建类,实现hashcode和equals方法(将要分组的关键字段实现,本例是根据专业和年级分组)

@Setter
@Getter
public class Student {
    Integer id;
    String name;
    Integer age;
    Integer subject;
    Integer grade;

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        Student that = (Student ) o;

        if (subject!= null ? !subject.equals(that.subject) : that.subject!= null) return false;
        return grade!= null ? grade.equals(that.grade) : that.grade== null;
    }

    @Override
    public int hashCode() {
        int result = subject!= null ? subject.hashCode() : 0;
        result = 31 * result + (grade!= null ? grade.hashCode() : 0);
        return result;
    }
}

对获取到的学生对象list集合进行处理

//获取学生对象集合
List<Student> studentList = studentMapper.findAll();
//创建map,key存放专业和年级分组,value存放数量
Map<Student, Integer> studentMap = new HashMap<Student, Integer>();
//遍历list进行分组
for (Student student : studentList) {
	Integer count = studentMap.get(student);
	if ( count == null) {
		count = 1;
	}else{
		count ++;
	}
	studentMap.put(student, count);
}

至此学生信息就按照专业和年级分组统计完毕!

关于map中key的比较参考链接: https://blog.csdn.net/java_weekly/article/details/80608231.

你可能感兴趣的:(java行业小白)