我正在努力按照对象的属性排序数组。我知道如何按顺序对数字进行排序,但我无法弄清楚如何使用对象进行排序。例如,假设对象A的position属性为1,而对象B的position属性为2.这些对象位于数组中。我怎么能根据这个属性对它们进行排序?
由于
答案 0 :(得分:1)
你有类似的东西:
public class ExampleObject {
public int position;
}
然后,只需使用Comparator
。
public static void main(String args[]) {
//example numbers
final Random r = new Random();
final List<ExampleObject> arrList = new ArrayList<>(100);
for (int i = 0; i < 100; i++) {
ExampleObject obj = new ExampleObject();
obj.position = r.nextInt(1000);
arrList.add(obj);
}
//comparator (as a lambda)
Collections.sort(arrList, (a, b) -> {
return a.position - b.position;
});
//output result
for (ExampleObject obj : arrList) {
System.out.println(obj.position);
}
}
此外,如果您必须对数组进行排序而不是List
,您也可以使用Arrays.sort()
这样的Comparator
。
答案 1 :(得分:0)
您可以通过在类中实施Comparable
界面进行比较,如下所示。
public class Applcation {
public static void main(String[] args) {
A ary[] = {new A("D", 1),new A("C", 7),new A("K", 4),new A("L", 8),new A("S", 3)};
Arrays.sort(ary);
for (A a : ary) {
System.out.println(a.id+" - "+a.name);
}
}
}
class A implements Comparable<A>{
String name;
int id;
public A(String name, int id) {
this.name = name;
this.id = id;
}
@Override
public int compareTo(A a) {
return this.id-a.id;
}
}
或者作为替代方案,您可以使用java 8流对数组进行排序,而无需实现Comparable
:
Arrays.stream(ary).sorted((a1,a2)->Integer.compare(a1.id, a2.id)).forEach(e->System.out.println(e.id+" - "+e.name));
输出:
1 - D
3 - S
4 - K
7 - C
8 - L