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

时间:2015-09-17 20:25:05

标签: 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”元素将首先出现,然后是“Pro Sports”元素,最后是“团队运动”。

你能否提供一些指示或分享一些代码?在Java或Groovy中。

2 个答案:

答案 0 :(得分:2)

在groovy中:

list.sort { it[0][0] }

如果您不想改变原始列表,并返回已排序的列表,则可以执行

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

答案 1 :(得分:2)

嗯,P来自R,所以如果我正确理解问题,顺序将是'Pro Sports,Baseball','Running Shoes'和'Team Sports'。您可以使用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']
]

提示

你正在降票,因为你可以通过阅读Groovy的文档来了解这一点。

相关问题