3

我正在使用 groovy 并且我有一个集合:

  • 人 1:年龄 - 1,体重 - 25
  • 人 2:年龄 - 2,体重 - 20
  • 第 3 人:年龄 - 3,体重 - 25

我需要找到所有年龄或体重在名为 getValidAgeForSchool() 或 getValidWeightForSchool() 的方法返回的有效年龄/体重列表中的人。年龄 [2,3] 或体重 [20,25]

我知道有这样的事情(也不工作)

persons.findAll{ it.age == 2 || it.weight == 20}

但我怎么说(比如 IN 子句)

persons.findAll {it.age in [2,3] || it.weight in [20,25]}.

我也试过这个(暂时忽略重量)但没有在应该返回的时候返回列表 persons.age.findAll{ it == 2 || it == 3}

谢谢。

4

1 回答 1

9

您拥有的代码有效:

def people = [
    [ id: 1, age: 1, weight: 25 ],
    [ id: 2, age: 2, weight: 20 ],
    [ id: 3, age: 3, weight: 25 ]
]

// This will find everyone (as everyone matches your criteria)
assert people.findAll {
           it.age in [ 2, 3 ] || it.weight in [ 20, 25 ]
       }.id == [ 1, 2, 3 ]

如果您有这样的实例列表,它也可以工作:

class Person {
    int id
    int age
    int weight
}

def people = [
    new Person( id: 1, age: 1, weight: 25 ),
    new Person( id: 2, age: 2, weight: 20 ),
    new Person( id: 3, age: 3, weight: 25 )
]

我假设你的问题是你有weight双重或什么?

如果 weight 是 a double,您需要执行以下操作:

people.findAll { it.age in [ 2, 3 ] || it.weight in [ 20d, 25d ] }.id

请注意,这是在进行双重等式比较,因此如果您对权重进行任何算术运算,您可能会成为舍入和准确性错误的牺牲品

于 2013-11-05T14:53:56.563 回答