首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Groovy:通过数组列表中的特定标记找到最便宜的价格

Groovy:通过数组列表中的特定标记找到最便宜的价格
EN

Stack Overflow用户
提问于 2018-07-24 14:15:59
回答 1查看 96关注 0票数 0

不知道如何有效地处理这件事。我有一个数组列表,如下所示:

代码语言:javascript
复制
 [[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站,机票类型经济,费用最低。
  • 一次有0站的入场,机票类型溢价,费用最低。
  • 1有超过0站的入场,票价最便宜的机票类型溢价。

并不是所有这些类别都有数组列表中的数据,如果不合适,只需忽略它。

做这件事最简单的方法是什么?任何帮助都非常感谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-24 14:32:46

您可以使用findAll()min()集合函数的组合。第一条允许您使用谓词筛选所有条目的列表,第二条允许您获得一个特定字段的最小值的条目。考虑以下例子:

代码语言:javascript
复制
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()

输出:

代码语言:javascript
复制
['name':'JIM', 'cost':331.99, 'ticket':'PREMIUM', 'stops':0]

此示例演示如何使用findAll()min()来实现您的目标:

  • findAll { it.stops == 0 && it.ticket == 'PREMIUM' }将所有条目的列表缩减为具有0停站和票务类型溢价的条目。
  • min { it.cost }以最小的cost值从筛选后的列表返回单个条目。

您可以简单地应用相同的策略来提取所有剩余的信息,并将其存储在任何您喜欢的结构中。

希望能帮上忙。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51500941

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档