java工具类-- String , List , Map相关

近期,又开始集合打交道较多.工具类写了一些 , 也有部分是百度得来的 . 毕竟这些工具类 不是我们开发日常太过于需要关注的东西 , 所以自己写还是比较费时间的 , 而且影响工作效率. 最后基本上有需求直接百度, 你的需求别人可没有 , 有时候真的想跳起来砸死 , 这种东西还用你教 , 好了 , 废话不多 . 直接上正文吧

1.合并 List<Map<String , Object>> , 千万别说 , 我可以循环遍历好几层也能能合并 , 第一代码不美观 , 冗余 , 第二如果数据量较大 性能影响也很大 , 复用性也不好

 public static List<Map<String, Object>>  merge(List<Map<String, Object>> m1, List<Map<String, Object>> m2) {

        m1.addAll(m2);

        Set<String> set = new HashSet<>();

        return m1.stream()
                .collect(Collectors.groupingBy(o -> {
                    //暂存所有key
                    set.addAll(o.keySet());
                    //按某字段区分 例如 id
                    return o.get("id");
                })).entrySet().stream().map(o -> {

                    //合并
                    Map<String, Object> map = o.getValue().stream().flatMap(m -> {
                        return m.entrySet().stream();
                    }).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (a, b) -> b));

                    //为没有的key赋值 ""
                    set.stream().forEach(k -> {
                        if (!map.containsKey(k)) {
                            map.put(k, "");
                        }
                    });

                    return map;
                }).collect(Collectors.toList());

    }
  1. List<Map<String , Object>> 排序 , 一般情况不是 o1-o2 , 就是 o2-o1 , 这个日期排序没啥可说的 , 就是 1 -1 排前排后
// 根据日期排序
    public static List<Map<String, Object>> sortForList(List<Map<String, Object>> list) {

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

        if (list != null && list.size() > 1) {
            Collections.sort(list, new Comparator<Map<String, Object>>() {
                @Override
                public int compare(Map<String, Object> o1, Map<String, Object> o2) {

                    Date o1Value = null;
                    Date o2Value = null;
                    try {
                        o1Value = sdf.parse((String) o1.get("date"));
                        o2Value = sdf.parse((String) o2.get("date"));
                    } catch (ParseException e) {
                        e.printStackTrace();
                    }
                    int num = 0;
                    boolean b = o1Value.getTime() > o2Value.getTime();
                    if (b) {
                        num = 1;
                    } else {
                        num = -1;
                    }
                    return num;
                }
            });
        }
        return list;
    }

3.根据指定key对map去重 , 适用于 List<Map<String , Object>>

public static List<Map<String, Object>> removeRepeatMapByKey(List<Map> list, String mapKey) {

        // 把list中的数据转换成msp,去掉多余数据,保留查找到第一个对应的数据
        List<Map<String, Object>> listMap = new ArrayList<>();

        Map<String, Map> msp = new HashMap<>();

        for (int i = list.size() - 1; i >= 0; i--) {
            Map map = list.get(i);

            Map zhuanhuanMap = new HashMap();
           
            Integer id = Integer.parseInt((String) zhuanhuanMap.get(mapKey));
            zhuanhuanMap.remove(mapKey);
            msp.put(String.valueOf(id), zhuanhuanMap);
        }
        // 把msp再转换成list,得到根据某一字段去掉重复的数据的List<Map>
        Set<String> mspKey = msp.keySet();
        for (String key : mspKey) {
            Map newMap = msp.get(key);
            newMap.put(mapKey, key);
            listMap.add(newMap);
        }
        return listMap;
    }

同时也希望各位大佬有觉得的不太好的欢迎评论区交流,有可以优化的地方也欢迎大佬指点指点 , 可以在评论区,或则私信给我 , 我会定期更新这一系列.后续也会有其他类型的文章更新出来
————————————————
版权声明:本文为CSDN博主「熬夜点灯人」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_46407579/article/details/109579164

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值