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周围加引号!