Java - 按第二项排序包含2个项目的列表列表

时间:2013-03-12 23:32:38

标签: java python sorting

我有Python代码:

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

我需要用Java编写相同的东西。

我有一个包含两个项目(索引和分数)的元组(或列表)列表,我需要按分数排序列表 - 第二项。我已经阅读过Collections.sort和Arrays.sort,但我仍然不知道如何制作它。

感谢您的回答。

2 个答案:

答案 0 :(得分:2)

Java使用lambda类,而不是Comparator<T>表达式。 <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;
    }
}

来自the documentation

  

<强> 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

答案 1 :(得分:0)

您需要使用Comparator。它允许您定义比较两个对象的方法,然后可以使用这些方法使用Collections.sort对这些对象的集合进行排序。