Java开发中对List< Map< String, Object > >集合去重并按大小拆分子列表
- 一、使用场景
- 二、实现步骤
- 三、相关知识
- 四、代码示例
一、使用场景
在处理大量List<Map<String, Object>>
集合的数据时,为确保数据的唯一性,需要先根据Map
的某个唯一标识进行去重,然后将去重后的数据切分成较小的子列表进行分组处理。
二、实现步骤
- 去重:通过将列表中的数据转换为Map,利用Map的键唯一性,去除重复的元素。同时,通过保留第一个出现的元素,可以确保数据的顺序。
- 切分:将去重后的列表按照指定大小进行切分,方便进行批量处理或分布式处理。
三、相关知识
-
Java 8 Stream API:提供了一种函数式编程风格的处理集合数据的方式,可以进行过滤、映射、排序、聚合等操作,大大提高了代码的可读性和简洁性。
-
Collectors工具类:提供了各种收集器,用于对 Stream 中的元素进行收集和汇总操作,如
toMap
、toList
等。 -
hutool 工具类:使用工具类中的
ListUtil.split(list, size)
方法,将列表切分为指定大小的子列表。
四、代码示例
public static void main(String[] args) {List<Map<String, Object>> list = new ArrayList<>();list.add(Map.of("id", 1, "date", "2024-01-01"));list.add(Map.of("id", 2, "date", "2024-01-02"));list.add(Map.of("id", 3, "date", "2024-01-03"));list.add(Map.of("id", 3, "date", "2024-01-04"));list.add(Map.of("id", 4, "date", "2024-01-05"));list.add(Map.of("id", 3, "date", "2024-01-06"));list.add(Map.of("id", 5, "date", "2024-01-07"));List<List<Map<String, Object>>> split = getLists(list);System.out.println(split);
}private static List<List<Map<String, Object>>> getLists(List<Map<String, Object>> list) {// 去重List<Map<String, Object>> resultList = new ArrayList<>(list.stream().collect(Collectors.toMap(map -> map.get("id"), // key 为 idmap -> map, // value 为整个 Map(existing, replacement) -> existing, // 如果有重复的 id,保留第一个出现的LinkedHashMap::new // 保持顺序)).values());// 切分为 100 条一组return ListUtil.split(resultList, 100);
}