簡體   English   中英

按內部列表的第一個元素對列表列表進行排序(Java或groovy)

[英]Sorting a list of lists by the first element of inner list (Java or 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中。

時髦:

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']
]

暗示

您之所以落選,是因為您可以閱讀Groovy的文檔來學習。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM