p_n*_*air 4 iteration groovy list hashmap
我正在尝试从地图中获取一个列表,并基于 id 的列表,并希望根据年龄(年龄 > 35)检索值(列表)
def people = [
"1": [[name:'Bob', age: 32, gender: 'M'],[name:'Johnny', age: 36, gender: 'M']],
"3": [[name:'Claire', age: 21, gender: 'F'],[name:'Amy', age: 54, gender:'F']],
"4": [[name:'John', age: 41, gender: 'F'],[name:'Sam', age: 54, gender:'F']]
]
def id = ["1","3"]
def age = people.subMap(id).values().findAll{it.age > 35}
Run Code Online (Sandbox Code Playgroud)
但是,我收到以下错误:
Cannot compare java.util.ArrayList with value '[32, 36]' and java.lang.Integer with value '35'
Run Code Online (Sandbox Code Playgroud)
如何获取所有年龄 > 35 岁的人员的名单?
您需要.flatten()的结果people.subMap(id).values(),因为它会生成映射列表的列表:
[[[name:Bob, age:32, gender:M], [name:Johnny, age:36, gender:M]], [[name:Claire, age:21, gender:F], [name:Amy, age:54, gender:F]]]
Run Code Online (Sandbox Code Playgroud)
当您这样做时,people.subMap(id).values().flatten()您将获得地图列表:
[[name:Bob, age:32, gender:M], [name:Johnny, age:36, gender:M], [name:Claire, age:21, gender:F], [name:Amy, age:54, gender:F]]
Run Code Online (Sandbox Code Playgroud)
然后你就可以申请了.findAll { it.age > 35 }
def people = [
"1": [[name: 'Bob', age: 32, gender: 'M'], [name: 'Johnny', age: 36, gender: 'M']],
"3": [[name: 'Claire', age: 21, gender: 'F'], [name: 'Amy', age: 54, gender: 'F']],
"4": [[name: 'John', age: 41, gender: 'F'], [name: 'Sam', age: 54, gender: 'F']]
]
def id = ["1", "3"]
def age = people.subMap(id).values().flatten().findAll { it.age > 35 }
println age
Run Code Online (Sandbox Code Playgroud)
输出:
[[name:Johnny, age:36, gender:M], [name:Amy, age:54, gender:F]]
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你。
| 归档时间: |
|
| 查看次数: |
21265 次 |
| 最近记录: |