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