Groovy中是否有方法收集一个列表中的所有对象,其中一个成员变量与另一个列表中的值相匹配?

Groovy中是否有方法收集一个列表中的所有对象,其中一个成员变量与另一个列表中的值相匹配?,groovy,Groovy,我有一个对象列表,比如Listfamilies 我还有一个带有FamilyNames的字符串列表,比如List名称 我希望以最理想的方式获得所有家族的列表,其中家族名称与姓名匹配 假设我有5个家庭。1至5。名字是Fam1,Fam2…Fam5 和names=[“Fam1”,“Fam2”] 如何获取包含Fam1和Fam2的家庭列表 如果我想匹配2个参数而不是1个,该怎么办 我想看看是否有一种方法可以做到这一点,而无需遍历整个列表并调用任何Groovy api 我想用最理想的方式得到一份所有家庭的名单

我有一个对象列表,比如
List
families

我还有一个带有FamilyNames的字符串列表,比如
List
名称

我希望以最理想的方式获得所有家族的列表,其中家族名称与姓名匹配

假设我有5个家庭。1至5。名字是Fam1,Fam2…Fam5 和
names=[“Fam1”,“Fam2”]

如何获取包含Fam1和Fam2的家庭列表

如果我想匹配2个参数而不是1个,该怎么办

我想看看是否有一种方法可以做到这一点,而无需遍历整个列表并调用任何Groovy api

我想用最理想的方式得到一份所有家庭的名单 家族名称与姓名匹配

很难说什么是最佳的,因为您可以针对不同的事情进行优化(最快的运行时间、最少的内存、最少的代码、最惯用的语言等等)

您还没有指明您正在使用的JDK,因此不清楚您是否愿意使用streams

一种非常简单的Groovy方法:

class Family {
    String name
}

List<Family> families = []
families << new Family(name: 'Fam1')
families << new Family(name: 'Fam2')
families << new Family(name: 'Fam4')
families << new Family(name: 'Fam5')

List names = ['Fam1', 'Fam2', 'Fam3']

List results = names.findAll { name ->
    families.find { family ->
        family.name == name
    }
}

// results will be  [Fam1, Fam2]
类族{
字符串名
}
列出族=[]
族<代码>类族{
字符串名
}
列出族=[]

族如果你想找到所有的族,你必须迭代整个族列表——否则你怎么知道你得到了所有的族呢。您对“groovyapi”的定义是什么?我们不允许使用它。这是家庭作业吗?另外,请补充一下,您已经尝试过的内容(源代码和您得到的错误),以便我们可以对其进行改进。我来自java世界。刚刚开始使用groovy语法。做这些事情有很多捷径。我一直在按照
families.findAll{it->it.name in names}
的顺序寻找一些东西。“请同时添加您已经尝试过的内容(源代码和错误),以便我们可以对其进行改进。”我不是在试图找到问题的解决方案。我已经提到了解决这个问题的方法(迭代)。我一直在寻找一个Groovy的“诀窍”,用更少的代码行就可以做到这一点。你对“Groovy API”的定义是什么?->类似于“findAll”的东西使用Groovy的好处是什么,然后阻止使用最后一次解码时使用的函数?或者更确切地说:这一限制背后的原因是什么?谢谢。我的目标是尽可能减少代码行数。最初的问题包括“如何获得包含Fam1和Fam2的列表?”。您对
families.findAll{it->it.name in names}
的解决方案将返回
Family
的集合,而不是名称的集合。集合检查包含性更有效。@JeffScottBrown,我已重新表述了我的问题。我试图得到一个家族列表。“一个集合更能有效地检查包容。”——@cfrick这是真的,但问题是关于想要使用
列表的明确问题
@JeffScottBrown“关于想要使用列表的明确问题”——
名称
class Family {
    String name
}

List<Family> families = []
families << new Family(name: 'Fam1')
families << new Family(name: 'Fam2')
families << new Family(name: 'Fam4')
families << new Family(name: 'Fam5')

List names = ['Fam1', 'Fam2', 'Fam3']`enter code here`

families.findAll { it -> it.name in names}