groovy - 如何在groovy中对多值列表进行排序?

标签 groovy

我的列表包含以下值

[
[Invoice Number:452170, Date:12-05-2016, Price:124589.0, Customer Name:David Copperfield], 
[Invoice Number:452171, Date:13-04-2014, Price:453212.0, Customer Name:David Bowie], 
[Invoice Number:452172, Date:24-07-2013, Price:21458.0, Customer Name:David Beckham], 
[Invoice Number:452173, Date:21-05-2017, Price:47852.0, Customer Name:David Koresh]
]

我想将此列表按价格降序排序,然后按 groovy 中客户名称的字母顺序排序。

最佳答案

您可以通过将闭包传递给 sort 来使用自定义排序顺序。方法如下所述:TO THE NEW - Groovier way of sorting over multiple fields in a list of maps in groovy

list.sort { a,b ->
   a.price <=> b.price ?: a.lastName <=> b.lastName
}

“宇宙飞船运算符(operator)”(<=>)调用compareTo用于排序的方法。当两个比较项相等时返回 0。这就是 elvis 运算符 ( ?: ) 的用武之地:它将前面的表达式计算为 boolean (根据常规的真实性)并返回它的值,如果它是 true 。由于 0 的计算结果为 false,因此返回 elvis 运算符后面的表达式。

因此,如果价格不相等( a.price <=> b.price 不为 0),则 a.price <=> b.price 的结果用于排序。但如果它们相等a.lastName <=> b.lastName用于排序。

关于groovy - 如何在groovy中对多值列表进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51894530/

相关文章:

Grails 从 2.2.1 升级到 2.3.4 @Secured 注解

java - GroovyTestCase 中的 expect 子句

jenkins - 将整个 Jenkins 阶段提取到共享库?

groovy - 带有@Field批注的Groovy 2.4变量范围

java - 了解 groovy 中 map 内容的不同之处

grails - 如何保持多对多关系的秩序

java - 如何正确取消 Nexus 任务(作为可执行脚本)?

Java/Groovy 文件 IO 用图像文件自己的内容替换图像文件 - 为什么这有效?

unit-testing - 无法在 Groovy 测试中设置只读属性