我们经常会遇到 List 转 Map 的需求,这是典型的空间换时间做法。
比如 List SchoolStudents 转 Map<ClassroomId,List>,将全校的学生转为班级 Map。
一般的写法是
for(student s in list){
if(map.contains(s.classroomId)){
list = map.get(s.classroomId);
}else{
list = new ArrayList();
map.put(s.classrommId,list);
}
list.add(s)
}
这一个操作,包括了 for,if..else,get,put,add 等操作,有点啰嗦。
Java8 提供了 merge,可以一步到位
list.stream.foreach(s-> map.merge(s.classroomId,Lists.new Arraylist(s),(oldList,newList)->{
oldList.addall(newList);return newList})
如果 s.classroomId 不在 map 中时,map 用 s.classroomId 作为 key,Lists.new Arraylist(s)作为 values。
如果在 map 中,oldList 为 map.get(s.classroomId),newList 为 Lists.new Arraylist(s),oldList.addall(newList)为相加后的,并返回。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于