簡體   English   中英

Java - 按第二項排序包含2個項目的列表列表

[英]Java - sorting a list of lists with 2 items by a second item

我有Python代碼:

self.sousedi_sorted = sorted(sousedi, key = lambda s: s[1])

我需要用Java編寫相同的東西。

我有一個包含兩個項目(索引和分數)的元組(或列表)列表,我需要按分數排序列表 - 第二項。 我已經閱讀過Collections.sort和Arrays.sort,但我仍然不知道如何制作它。

謝謝您的回答。

Java使用Comparator<T>類而不是lambda表達式。 <T>表示它是通用的 - 當您實現比較器時,您可以指定要比較的類型。

您可以按如下方式實現Comparator

// This defines a class, MyComparator, that will compare objects
// of type SomeClass (because that's what's in the angle brackets)
public class MyComparator implements Comparator<SomeClass> {
    @Override
    public int compare(SomeClass o1, SomeClass o2) {
        // This method compares o1 and o2.
        // If o1 is "greater than" o2, it returns a positive number.
        // If they are equal, it returns 0.
        // If o1 is "less than" o2, it returns a negative number.

        // For example:
        return o1.someInt - o2.someInt;
    }
}

文檔

int compare(T o1, T o2)
比較它的兩個參數的順序。 返回負整數,零或正整數,因為第一個參數小於,等於或大於第二個參數。

然后,您可以使用Collections.sort(listVariableName, new MyComparator())對列表進行排序:

ArrayList<SomeClass> someListOfThings = new ArrayList<SomeClass>();
// add things to the list with someListOfThings.add(...)
Collections.sort(someListOfThings, new MyComparator());
// list is now sorted according to the `compare` method in MyComparator

所以在你的情況下你可能有:

class MyObject {
    public int index;
    public int score;
}
class MyObjectScoreComparator implements Comparator<MyObject> {
    public int compare(MyObject o1, MyObject o2) {
        return o1.score - o2.score;
    }
}

然后使用sort

你會想要使用比較器 它允許您定義比較兩個對象的方法,然后可以使用這些方法使用Collections.sort對這些對象的集合進行排序。

暫無
暫無

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

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