关于JDK8对LIST转MAP,MAP再转LIST,并防止排序错乱问题(严格控制以查询出来的数据某一字段排序)

废话不多说直接上图...

关于JDK8对LIST转MAP,MAP再转LIST,并防止排序错乱问题(严格控制以查询出来的数据某一字段排序)_第1张图片

list转map再转list代码如下:

List details = thisDao.queryMeetingDetails(map);
if (details != null && details.size() > 0) {
    Map> collect = details.stream().collect(Collectors.groupingBy(MeetDetailsEntity::getTypeName));
    /// 博文参考 https://blog.csdn.net/qq_34144916/article/details/81154528 
    /// List keys = new LinkedList<>();
    /// List values = new LinkedList<>();
    List keys = new ArrayList<>(collect.size());
    List values = new ArrayList<>(collect.size());
    details.forEach(res -> {
        boolean b = keys.stream().anyMatch(u -> u.equals(res.getTypeName()));
        if (!b) {
            keys.add(res.getTypeName());
            MeetingDetailsVO meetingDetailsVO = new MeetingDetailsVO();
            meetingDetailsVO.setFiletypename(res.getTypeName());
            meetingDetailsVO.setDoc(collect.get(res.getTypeName()));
            values.add(meetingDetailsVO);
            meetingDetailsVO = null;
        }
    });
}
return values;

 list直接转list代码如下:

List keys = new LinkedList<>();
List values = new LinkedList<>();
details.forEach(res -> {
    if (!StringUtils.isEmpty(res.getTypeName())){
        boolean b = keys.stream().anyMatch(u -> u.equals(res.getTypeName()));
        if (!b) {
            keys.add(res.getTypeName());
            MeetingDetailsVO meetingDetailsVO = new MeetingDetailsVO();
            meetingDetailsVO.setFiletypename(res.getTypeName());
            meetingDetailsVO.setDoc(details.stream().filter((MeetDetailsEntity meetDetailsEntity) -> res.getTypeName().equals(meetDetailsEntity.getTypeName())).collect(Collectors.toList()));
            values.add(meetingDetailsVO);
            meetingDetailsVO = null;
        }
    }
});

通过上面的代码比对,个人觉得先转MAP比较快,若懂原理的希望留言评论一下。

上面的代码个人觉得唯一需待优化的就是关于实体多次new的问题。若还有其他方面的问题,还请大佬留言指教。

Thanks♪(・ω・)ノ

你可能感兴趣的:(java,web)