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

Groovy:从Map中筛选指定条件的Fizz对象存入Set

解决Groovy中筛选指定name的Fizz对象集合问题

嘿,这个需求在Groovy里处理起来超简单,得益于Groovy对集合操作的语法糖支持!下面给你几种直接有效的实现方式:

最简洁的原生实现方式

直接对allFizzes的所有值进行筛选,再转成你需要的Set类型:

// 方式1:用as Set转换类型
Set<Fizz> badFizzes = allFizzes.values().findAll { it.name == 'Sampson' } as Set

// 方式2:用toSet()方法,可读性更强
Set<Fizz> badFizzes = allFizzes.values().findAll { it.name == 'Sampson' }.toSet()

代码解释

  • allFizzes.values():获取Map中所有的Fizz对象实例,返回一个Collection<Fizz>
  • findAll { it.name == 'Sampson' }:Groovy集合的原生方法,传入闭包筛选出name字段等于'Sampson'的所有元素,返回List<Fizz>
  • 最后通过as Set或toSet()把List转成Set类型,满足你需要的Set<Fizz>类型要求

额外说明

因为你的Fizz类使用了@Canonical注解,这个注解会自动帮你生成基于所有字段的equals()和hashCode()方法,所以把筛选后的对象放入Set时,不会出现重复元素(只有当两个Fizz的id和name完全相同时,才会被视为重复)。

如果你偏好Java Stream风格的写法(Groovy 3+支持),也可以这么写,但不如原生方式简洁:

import java.util.stream.Collectors

Set<Fizz> badFizzes = allFizzes.values().stream()
    .filter { it.name == 'Sampson' }
    .collect(Collectors.toSet())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:33:57