Java开发中对List<Map<String, Object>>集合去重并按大小拆分子列表

Java开发中对List< Map< String, Object > >集合去重并按大小拆分子列表

一、使用场景

在处理大量List<Map<String, Object>>集合的数据时,为确保数据的唯一性,需要先根据Map的某个唯一标识进行去重,然后将去重后的数据切分成较小的子列表进行分组处理。

二、实现步骤

  1. 去重:通过将列表中的数据转换为Map,利用Map的键唯一性,去除重复的元素。同时,通过保留第一个出现的元素,可以确保数据的顺序。
  2. 切分:将去重后的列表按照指定大小进行切分,方便进行批量处理或分布式处理。

三、相关知识

  1. Java 8 Stream API:提供了一种函数式编程风格的处理集合数据的方式,可以进行过滤、映射、排序、聚合等操作,大大提高了代码的可读性和简洁性。

  2. Collectors工具类 :提供了各种收集器,用于对 Stream 中的元素进行收集和汇总操作,如toMap、toList等。

  3. hutool 工具类 :使用工具类中的ListUtil.split(list, size)方法,将列表切分为指定大小的子列表。

四、代码示例

java 复制代码
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 为 id
                    map -> map, // value 为整个 Map
                    (existing, replacement) -> existing, // 如果有重复的 id,保留第一个出现的
                    LinkedHashMap::new // 保持顺序
            )).values());
    // 切分为 100 条一组
    return ListUtil.split(resultList, 100);
}
相关推荐
m0_5873830012 小时前
广州 24 小时自助健身房解决方案技术实现与实战指南
java·spring·小程序·架构·需求分析
·云扬·12 小时前
Prompt 工程与安全:从 System 设计到注入防御
java·人工智能·安全·ai·prompt
代码不停13 小时前
自动化测试(java)
java·开发语言·selenium·自动化
鬼手点金15 小时前
opencode-rules 插件
java·开发语言·前端·人工智能·chrome·git·github
paopaokaka_luck15 小时前
滑雪场管理系统(AI智能助手流式对话,ECharts 运营数据分析、教练、雪具与场地一体化预约,钱包支付退款、订单核销与服务评价)
java·人工智能·spring boot·网络协议·数据分析·echarts
Wang's Blog16 小时前
Java 项目实战: 交友项目 - Dubbo 的内部结构与一次调用的完整链路
java·dubbo
Wang's Blog16 小时前
Java 项目实战: 交友项目 - Dubbo 入门引导
java·dubbo·交友
蜗牛互联网16 小时前
Python Agent工具调用的白名单、参数校验与审批门禁
java·服务器·前端·人工智能·后端·python
SL_staff17 小时前
当规则引擎开始‘懂业务’:JVS-Rules金融风控四大原生能力拆解
java·python·全栈
Shaoshing17 小时前
前缀和与差分
java·数据结构·算法·前缀和·差分