我有 Python 代码:
self.sousedi_sorted = sorted(sousedi, key = lambda s: s[1])
我需要用Java写同样的东西。
我有一个包含两项(索引和分数)的元组(或列表)列表,我需要按分数对列表进行排序 - 第二项。我已经阅读了 Collections.sort 和 Arrays.sort,但我仍然不知道如何制作它。
谢谢您的回答。
lambda
Java 使用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;
}
}
从文档中:
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
.
您将需要使用Comparator。它允许您定义一种比较两个对象的方法,然后可以使用 Collections.sort 对这些对象的集合进行排序。