You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java Groovy中如何过滤map列表,按name+doc分组保留最新日期数据

实现思路
  • 第一步:以name和doc的组合作为分组键,对列表中的所有Map进行分组
  • 第二步:遍历每个分组,对分组内的条目按date字段降序排序,取排序后的第一条(即日期最新的条目)
  • 第三步:把所有分组取出的最新条目重新整合为结果列表即可
代码实现

如果你的date字段已经是Groovy Date类型,直接使用以下核心逻辑即可:

// 示例原始数据(date已为Date类型的场景)
def originalList = [
  [name: 'name1', date: Date.parse("EEE MMM dd HH:mm:ss z yyyy", "Sat Oct 01 00:00:00 CEST 2021"), doc: 'doc1'],
  [name: 'name2', date: Date.parse("EEE MMM dd HH:mm:ss z yyyy", "Sun Oct 14 00:00:00 CEST 2021"), doc: 'doc1'],
  [name: 'name2', date: Date.parse("EEE MMM dd HH:mm:ss z yyyy", "Sat Oct 23 00:00:00 CEST 2021"), doc: 'doc2'],
  [name: 'name2', date: Date.parse("EEE MMM dd HH:mm:ss z yyyy", "Sat Oct 15 00:00:00 CEST 2021"), doc: 'doc2'],
  [name: 'name2', date: Date.parse("EEE MMM dd HH:mm:ss z yyyy", "Sat Oct 04 00:00:00 CEST 2021"), doc: 'doc3'],
  [name: 'name2', date: Date.parse("EEE MMM dd HH:mm:ss z yyyy", "Sat Oct 11 00:00:00 CEST 2021"), doc: 'doc4'],
  [name: 'name3', date: Date.parse("EEE MMM dd HH:mm:ss z yyyy", "Sat Oct 20 00:00:00 CEST 2021"), doc: 'doc1'],
  [name: 'name3', date: Date.parse("EEE MMM dd HH:mm:ss z yyyy", "Sat Oct 03 00:00:00 CEST 2021"), doc: 'doc2'],
]

// 核心处理逻辑
def result = originalList.groupBy { [it.name, it.doc] } // 按name+doc组合分组
                .values() // 提取所有分组的内容
                .collect { group ->
                    group.max { it.date } // 每个分组取date最大的最新条目
                }

// 结果验证
result.each { println it }

如果你的date字段当前是字符串格式,仅需要修改max方法的比较逻辑,先把字符串转为Date类型即可:

def result = originalList.groupBy { [it.name, it.doc] }
                .values()
                .collect { group ->
                    group.max { Date.parse("EEE MMM dd HH:mm:ss z yyyy", it.date) }
                }
结果说明

运行代码后会自动过滤同name同doc组合下日期更早的条目,你示例中被注释的10月15日的条目会被过滤,仅保留10月23日的同组合最新条目,最终得到符合要求的去重列表。

内容的提问来源于stack exchange,提问作者Filipe Madureira

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 22:09:03