JDK 1.8 List 多次 分组

在公司的一个新需求中,需要对list中进行分组,用了一大段繁琐大代码进行实现,结果发现JDK1.8有这个功能,真是太强大了


public static void main(String[] args){
//无视对象,在此记录,以防遗忘
//两次 groupBy
    List list = new ArrayList<>();

    RStudentExam rse1 = new RStudentExam();
    rse1.setId(1L);
    rse1.setSchoolId(1L);
    rse1.setStudentId(3L);
    list.add(rse1);

    RStudentExam rse2 = new RStudentExam();
    rse2.setId(1L);
    rse2.setSchoolId(2L);
    rse2.setStudentId(3L);
    list.add(rse2);

    RStudentExam rse3 = new RStudentExam();
    rse3.setId(2L);
    rse3.setSchoolId(1L);
    rse3.setStudentId(3L);
    list.add(rse3);

    RStudentExam rse4 = new RStudentExam();
    rse4.setId(2L);
    rse4.setSchoolId(2L);
    rse4.setStudentId(3L);
    list.add(rse4);

    RStudentExam rse5 = new RStudentExam();
    rse5.setId(2L);
    rse5.setSchoolId(2L);
    rse5.setStudentId(3L);
    list.add(rse5);

    Map,Map,List>> map = list
            .stream()
            .collect(Collectors.groupingBy(RStudentExam::getId,Collectors.groupingBy(RStudentExam::getSchoolId)));
}



下面是JDK1.8进行去重


List noteDescs =  null ;
Map maps =  new  HashMap<>();
 
List descs = noteDescDao.findAll();
 
// 根据noteId去重
List lists = descs.
        stream().
        collect(collectingAndThen(toCollection(() -> 
                new  TreeSet<>(Comparator.comparing(NoteDesc::getNoteID))), ArrayList:: new ));
 
for  (NoteDesc noteDesc : lists) {
     noteDescs =  new  ArrayList<>();
     for  (NoteDesc desc : descs) {
        if (noteDesc.getNoteID() == desc.getNoteID()) {
             noteDescs.add(desc);
         }
     }
     maps.put(noteDesc.getNoteName(), noteDescs);
}
 
return  maps;

你可能感兴趣的:(list)