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

Groovy中无需嵌套循环提取列表重复名称的单行实现方法

一行代码搞定Groovy重复名称提取(无嵌套循环)

当然可以!而且完全不用嵌套循环,一行代码就能实现需求。不过先小纠正下:你给出的结构其实是Groovy Map(键值对形式),不是List,但这完全不影响咱们的实现。

直接上单行解决方案:

list.values().collect { it.name }.countBy { it }.findAll { it.value > 1 }.keySet().toList()

我给你拆解下每一步的作用,方便理解:

  • list.values():先把Map里所有的对象(也就是object1、object2、object3对应的值)提取出来,得到对象集合
  • collect { it.name }:遍历每个对象,取出name属性,得到列表["Tom", "Mary", "Tom"]
  • countBy { it }:按名称统计出现次数,生成一个统计Map:[Tom:2, Mary:1]
  • findAll { it.value > 1 }:筛选出出现次数大于1的条目,剩下[Tom:2]
  • keySet().toList():取出这些条目的键(也就是重复的名称),转成List,最终得到预期的["Tom"]

如果你的数据结构其实是标准List(比如每个元素是带id和name的对象,没有object1这类键),那代码更简洁,去掉.values()就行:

list.collect { it.name }.countBy { it }.findAll { it.value > 1 }.keySet().toList()

整个过程全程用Groovy的内置高阶函数,没有手动写任何嵌套循环,完全符合你的要求~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:49:45