Groovy中对象数组的多级排序:按第三个元素及第二个元素排序的实现需求
Groovy数组按指定规则排序的实现方案
嗨,这事儿在Groovy里其实挺容易搞定的!你需要的是先按每个子数组的第三个元素排序,当第三个元素相同时再按第二个元素排序,咱们可以利用Groovy对集合排序的便捷特性来实现。
实现代码
直接看完整的示例吧,你可以直接复制运行验证:
def meal = [['Apple','Tomatoes', 'Coffee'],['Peach','Broccoli', 'Water'],['Orange','Peas', 'Pepsi'],['Banana','Beans', 'Coffee']] // 核心排序逻辑 meal.sort { [it[2], it[1]] } // 打印验证结果 println meal
逻辑解释
这里用到了Groovy的sort方法,传入的闭包返回一个包含两个元素的列表:
- 第一个元素
it[2]是子数组的第三个元素(Groovy数组是0索引的),这是第一排序优先级 - 第二个元素
it[1]是子数组的第二个元素,作为第二排序优先级
Groovy会自动按照这个列表的自然顺序进行排序:先比较第一个元素,当两个子数组的第三个元素相等时,再比较第二个元素,完全匹配你需要的排序规则。
运行结果
执行后你会得到期望的排序结果:
[[Banana, Beans, Coffee], [Apple, Tomatoes, Coffee], [Orange, Peas, Pepsi], [Peach, Broccoli, Water]]
如果你想保留原数组不变,而是生成一个新的排序后的数组,可以用toSorted()方法,比如:
def sortedMeal = meal.toSorted { [it[2], it[1]] }
这样原meal数组不会被修改,排序后的结果存在sortedMeal里。
内容的提问来源于stack exchange,提问作者TestingCodes
相关产品推荐
相关产品推荐

