我的列表包含以下值
[
[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/