给集合中的元素(实体类对象)按照某个属性进行排序
程序员文章站
2022-07-12 13:51:36
...
List<SysModule> sysModuleList = sysModuleMapper.getModulesByUserId(userId);
List<SysModule> sysPmoduleList=sysModuleList.stream().filter
(sysModule -> "0".equals(sysModule.getModule_pid())).collect(Collectors.toList());
for (SysModule sysModule:sysPmoduleList) {
List<SysModule> collect = sysModuleList.stream().filter
(sysModule1 -> sysModule1.getModule_pid().equals(sysModule.getModule_id())).collect(Collectors.toList());
sysModule.setSysModuleList(collect);
}
上图通过拉姆达表达式(jdk1.8新特性),可以将一级Module以及一级下的二级Module从sysModuleList遍历抽取出来
。具体细节上篇博文已讲,源码的话博主也没有看,很伤心。
那么下面我们讲一下如何对集合中的元素进行排序,因为在开发的过程中少不了对元素进行排序。就拿上一个一级集合(sysPmoduleList)
举例子。
for (SysModule sysModule:sysPmoduleList) {
List<SysModule> sysModuleList1 = sysModule.getSysModuleList();
Collections.sort(sysModuleList1, new Comparator<SysModule>() {
@Override
public int compare(SysModule o1, SysModule o2) {
return o1.getSortcode().compareTo(o2.getSortcode());
}
@Override
public boolean equals(Object obj) {
return false;
}
});
sysModule.setSysModuleList(sysModuleList1);
}
Collections.sort(sysPmoduleList, new Comparator<SysModule>() {
@Override
public int compare(SysModule o1, SysModule o2) {
return o1.getSortcode().compareTo(o2.getSortcode());
}
@Override
public boolean equals(Object obj) {
return false;
}
});
return sysPmoduleList;
上面意思是说,先遍历一级模块,然后得到每一个一级模块的二级模块(一级模块的一个属性),在对二级模块进行遍历,根据二级模块sortCode进行排序,然后将二级模块赋值给一级模块的属性,依次进行。
注意后面还是遍历一级模块,这次是根据一级模块的sortCode进行排序。最后return. 这次操作是不仅将一级模块根据sortCode进行排序,同时也将一级模块的属性(二级模块的集合)根据sortCode进行排序。
这辈子坚持与不坚持都不可怕,怕的是独自走在坚持的道路上!!! | |
---|---|
欢迎加入技术群聊