Groovy:通过数组列表中的特定标记找到最便宜的价格
不知道如何有效地处理这个问题。我有一个数组列表,如下所示:Groovy:通过数组列表中的特定标记找到最便宜的价格,groovy,Groovy,不知道如何有效地处理这个问题。我有一个数组列表,如下所示: [[name:BOB, cost:225.99, ticket:ECONOMY, stops:1], [name:JIM, cost:331.99, ticket:PREMIUM, stops:0], [name:SAL, cost:331.99, ticket:ECONOMY, stops:0], [name:PETE, cost:456.99, ticket:PREMIUM, stops:0]] 这只是一个例子 我想从中得到的是
[[name:BOB, cost:225.99, ticket:ECONOMY, stops:1], [name:JIM, cost:331.99, ticket:PREMIUM, stops:0], [name:SAL, cost:331.99, ticket:ECONOMY, stops:0], [name:PETE, cost:456.99, ticket:PREMIUM, stops:0]]
这只是一个例子
我想从中得到的是一个数据结构(不管是什么类型,字符串都可以,它包含:
- 1个入口,0站,票型经济,成本最低
- 1个具有0个以上站点的入口,票型经济,成本最低
- 1个具有0个站点的入口,门票类型为PREMIUM,成本最低
- 1个超过0站的入口,票价最低的门票类型溢价
最简单的方法是什么?非常感谢您的帮助。您可以结合使用
findAll()
和min()集合函数。第一个将使用谓词过滤所有条目的列表,第二个将使您获得一个具有特定字段的最小值的条目。请考虑以下示例:
def data = [
[name: 'BOB', cost: 225.99, ticket: 'ECONOMY', stops: 1],
[name: 'JIM', cost: 331.99, ticket: 'PREMIUM', stops: 0],
[name: 'SAL', cost: 331.99, ticket: 'ECONOMY', stops: 0],
[name: 'PETE', cost: 456.99, ticket: 'PREMIUM', stops: 0]
]
// 1 entry with 0 stops, ticket type PREMIUM, that has the cheapest cost
def result = data.findAll { it.stops == 0 && it.ticket == 'PREMIUM' }.min { it.cost }
println result.inspect()
输出:
['name':'JIM', 'cost':331.99, 'ticket':'PREMIUM', 'stops':0]
此示例显示如何使用findAll()
和min()
来实现您的目标:
findAll{it.stops==0&&it.ticket=='PREMIUM'}
将所有条目的列表减少为具有0个站点和票证类型PREMIUM的条目
min{it.cost}
返回筛选列表中具有最小cost
值的单个条目
您可以简单地应用相同的策略提取所有剩余信息,并将其存储在您喜欢的任何结构中
希望有帮助。它导致了一个错误。groovy.lang.MissingPropertyException:没有这样的属性:它用于类:DUMMY???明白了!需要在0周围加引号!