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

时间:2018-09-24 23:28:49

标签: groovy

我有一个对象列表,例如List<Family>个族。

我还有另一个带有FamilyName的字符串列表,说List<String>名称。

我想以最理想的方式来获取所有与家庭名称相匹配的家庭列表。

例如:假设我有5个家庭。 1至5,名称为Fam1,Fam2 .... Fam5 还有names = ["Fam1", "Fam2"]

如何获取包含Fam1和Fam2的家庭名单?

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

我试图查看是否有一种方法可以不遍历整个列表并调用任何Groovy api来做到这一点?

2 个答案:

答案 0 :(得分:1)

  

我想以最理想的方式获取所有家庭的清单   FamilyNames与名称相匹配。

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

您尚未说明正在使用什么JDK,因此尚不清楚是否愿意使用流。

一种非常简单的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]

我希望有帮助。

答案 1 :(得分:-2)

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}