在公司的一个新需求中,需要对list中进行分组,用了一大段繁琐大代码进行实现,结果发现JDK1.8有这个功能,真是太强大了
public static void main(String[] args){
//无视对象,在此记录,以防遗忘
//两次 groupBy
List<RStudentExam> 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<Long,Map<Long,List<RStudentExam>>> map = list
.stream()
.collect(Collectors.groupingBy(RStudentExam::getId,Collectors.groupingBy(RStudentExam::getSchoolId)));
}
下面是JDK1.8进行去重
List<NoteDesc> noteDescs =
null
;
Map<String, Object> maps =
new
HashMap<>();
List<NoteDesc> descs = noteDescDao.findAll();
List<NoteDesc> 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;