JDK8 list<object>转map<string,map<string,list<object>>>并排序 示例

先上测试代码:

package com.lalala.test;

import lombok.Data;

import java.util.*;
import java.util.stream.Collectors;

/**
 * 类描述:
 *
 * @ClassName test
 * @Description TODO
 * @Author lalala
 * @Date 2023/8/18 11:12
 * @Version 1.0
 */
public class test {
    @Data
    static class Obj{
        public Obj(String name, String sortNo, String dirName, String levelSort, String levelName) {
            this.name = name;
            this.sortNo = sortNo;
            this.dirName = dirName;
            this.levelSort = levelSort;
            this.levelName = levelName;
        }
        //序号
        String sortNo;
        //目录名称
        String dirName;
        //级次序号
        String levelSort;
        //级次名称
        String levelName;
        //名称
        String name;
    }

    public static void main(String[] args) {
        List<Obj> list = new ArrayList<>();
        list.add(new Obj("name","1","d1","1","级次"));
        list.add(new Obj("name","5","d2","3","级次"));
        list.add(new Obj("name","2","d2","3","级次"));
        list.add(new Obj("name","5","d1","2","级次"));
        list.add(new Obj("name","2","d1","1","级次"));
        list.add(new Obj("name","3","d1","3","级次"));
        list.add(new Obj("name","1","d2","2","级次"));
        list.add(new Obj("name","4","d1","2","级次"));
        list.add(new Obj("name","4","d2","1","级次"));
        list.add(new Obj("name","3","d2","4","级次"));
        LinkedHashMap<String, LinkedHashMap<String, List<Obj>>> collect = list.stream()
                //1.1按照目录名称降序排序 默认升序 reversed()降序
                .sorted(Comparator.comparing(Obj::getDirName).reversed())
                .collect(
                        //1.2按照目录名称分组
                        Collectors.groupingBy(
                                dirOfObj -> dirOfObj.getDirName(),
                                //方式一 分组+排序
                                LinkedHashMap::new,
                                Collectors.collectingAndThen(
                                        //2.1按照级次序号+级次名称分组
                                        Collectors.groupingBy(
                                                levelOfObj -> levelOfObj.getLevelSort() + "_" + levelOfObj.getLevelName(),
                                                LinkedHashMap::new,
                                                Collectors.collectingAndThen(
                                                        Collectors.toList(),
                                                        //3.按照序号排序
                                                        tolist -> {
                                                            tolist.sort(Comparator.comparing(Obj::getSortNo));
                                                            return tolist;
                                                        }
                                                )
                                        ),
                                        //2.2按照级次序号排序
                                        map -> {
                                            map = map.entrySet().stream().sorted(
                                                    (o1, o2) -> o1.getKey().split("_")[0].compareTo(o2.getKey().split("_")[0])
                                            ).collect(Collectors.toMap(
                                                    Map.Entry::getKey,
                                                    Map.Entry::getValue,
                                                    (oldVal, newVal) -> oldVal,
                                                    LinkedHashMap::new
                                            ));
                                            return map;
                                        }
                                )
                                //方式二 分组不带排序
//                                    Collectors.groupingBy(
//                                            levelOfObj -> levelOfObj.getLevelSort() + "_" + levelOfObj.getLevelName(),
//                                            LinkedHashMap::new,
//                                            Collectors.collectingAndThen(
//                                                    Collectors.toList(),
//                                                    tolist -> {
//                                                        tolist.sort(Comparator.comparing(Obj::getSortNo));
//                                                        return tolist;
//                                                    }
//                                            )
//                                    )
                        )
                );
        System.out.println(list);
        System.out.println(collect);

    }
}

 输出截图

1.初始list

2.转为map

Map<key1,Map<key2,List<Obj>>>

key1:目录名分组 --按照目录名称降序排序

key2:级次序号+级次名称分组 --按照级次序号升序排序

list<Obj>分组后集合数据 --按照序号升序排序

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值