按内部列表的第一个元素对列表进行排序(Java或groovy)

按内部列表的第一个元素对列表进行排序(Java或groovy),java,list,sorting,groovy,Java,List,Sorting,Groovy,我有一个列表,其中包含一个字符串列表,如 ["Running Shoes", "Men's Shoes", "Men's Walking Shoes"] ["Team Sports", "Ice Hockey", "Recreational Ice Skates"] ["Pro Sports", "Baseball", "Baseball Gloves", "Adult Gloves"] 我想按子列表中的第一个元素对该列表进行排序,即索引0处的元素。因此,在这个排序后的示例中,“跑鞋”元

我有一个列表,其中包含一个字符串列表,如

 ["Running Shoes", "Men's Shoes", "Men's Walking Shoes"]
 ["Team Sports", "Ice Hockey", "Recreational Ice Skates"]
 ["Pro Sports", "Baseball", "Baseball Gloves", "Adult Gloves"]
我想按子列表中的第一个元素对该列表进行排序,即索引0处的元素。因此,在这个排序后的示例中,“跑鞋”元素将是第一个,然后是“职业体育”元素,最后是“团队体育”

你能给我一些建议或者分享一些代码吗?在Java或Groovy中。

在Groovy中:

list.sort { it[0][0] }
如果不想改变原始列表并返回排序后的列表,可以这样做

list.sort(false) { it[0][0] }

好的,p在R之前,所以如果我正确理解了这个问题,顺序应该是“职业运动、棒球”、“跑鞋”和“团队运动”。使用Groovy可以很容易地对其进行排序,如下所示:

[
     ["Running Shoes", "Men's Shoes", "Men's Walking Shoes"],
     ["Team Sports", "Ice Hockey", "Recreational Ice Skates"],
     ["Pro Sports", "Baseball", "Baseball Gloves", "Adult Gloves"]
].toSorted { a, b -> a[0] <=> b[0] }
[
    ['Pro Sports', 'Baseball', 'Baseball Gloves', 'Adult Gloves'],
    ['Running Shoes', "Men's Shoes", "Men's Walking Shoes"],
    ['Team Sports', 'Ice Hockey', 'Recreational Ice Skates']
]
您还可以使用比较器进行长期测试:

class ListComparator implements Comparator<List> {
    int compare(List obj1, List obj2) {
        obj1[0].compareTo(obj2[0])
    }

    boolean equals(Object obj) {
        this == obj
    }
}

[
     ["Running Shoes", "Men's Shoes", "Men's Walking Shoes"],
     ["Team Sports", "Ice Hockey", "Recreational Ice Skates"],
     ["Pro Sports", "Baseball", "Baseball Gloves", "Adult Gloves"]
].toSorted( new ListComparator()) == [
    ['Pro Sports', 'Baseball', 'Baseball Gloves', 'Adult Gloves'],
    ['Running Shoes', "Men's Shoes", "Men's Walking Shoes"],
    ['Team Sports', 'Ice Hockey', 'Recreational Ice Skates']
]
类ListComparator实现Comparator{
int比较(列表obj1,列表obj2){
obj1[0]。比较(obj2[0])
}
布尔等于(对象obj){
this==obj
}
}
[
[“跑鞋”、“男鞋”、“男式步行鞋”],
[“团队运动”、“冰球”、“休闲溜冰鞋”],
[“职业运动”、“棒球”、“棒球手套”、“成人手套”]
].toSorted(新的ListComparator())==[
[‘职业体育’、‘棒球’、‘棒球手套’、‘成人手套’],
[‘跑鞋’、‘男式鞋’、‘男式步行鞋’],
[‘团队运动’、‘冰球’、‘休闲溜冰鞋’]
]
暗示
你得到的选票越来越少,因为你可以通过阅读Groovy的文档来了解这一点。

你可以编写一个
比较器
并使用
集合。排序
p
R
少,所以肯定
职业体育
会是第一位的?当然,蒂姆,你是对的。谢谢你的回答,这正是我需要的为什么我的问题被否决了?仇恨者只是仇恨。@user3223841你会被否决,因为问题是你想要什么,而不是你尝试了什么。