我的列表中包含以下值
[
[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]
]
我想按价格降序对列表进行排序,然后按常规字母顺序按客户名称排序。
答案 0 :(得分:1)
您可以通过将闭包传递给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
}
“太空飞船运营商”(<=>
)调用用于分类的compareTo
方法。当两个比较项相等时,它返回0。这是elvis运算符(?:
)出现的地方:它将运算符之前的表达式评估为boolean
(根据常规真实性),如果表达式为true
,则返回其值。由于0的计算结果为false,因此将返回elvis运算符后面的表达式。
因此,如果价格不相等(a.price <=> b.price
不为0),则将a.price <=> b.price
的结果用于排序。但是如果它们相等,a.lastName <=> b.lastName
用于排序。
答案 1 :(得分:0)
如果您进行直接排序怎么办?
invoices.sort { a, b ->
if (a.Price > b.Price) return -1
if (a.Price < b.Price) return 1
else
return (a.'Customer Name' > b.'CustomerName') ? -1 : 1
}