我有一个A类型的对象列表,我必须为A的字段订购它,该字段的类型为String。
public class A{
public String field1;
public Integer field2;
...
}
如果我必须为int字段订购,那么就会这样做:
Collections.sort(listOfA, new Comparator<A>() {
public int compare(A p1, A p2) {
return p1.field2 - p2.field2);
}
});
但遗憾的是需要按String类型的字段进行排序。
我该怎么做?
答案 0 :(得分:7)
public int compare(A p1, A p2) {
return p1.field2.compareTo( p2.field2) );
}
答案 1 :(得分:3)
或者,您的类可以实现接口Comparable,就像这样
public class A implements Comparable<A> {
public String field1;
public Integer flied2;
public int compareTo(A o) {
return this.field1.compareTo(o.field1);
}
}
哪会允许你
Collections.sort(listofA);
如果A总是按field1排序,那么哪个IMO更可取/更清洁。
答案 2 :(得分:1)
您可以使用字符串compareTo
答案 3 :(得分:0)
不过是旧线程。
使用 Java 8,您现在拥有 lambda:
listOfA.sort((a,b) -> a.field1.compareTo(b.field1));
另外,如果你有一个用于 field1 的 getter,那么你也可以这样做
listOfA.sort(Comparator.comparing(A::getFieldOne));
如果你没有 getter,还有这个:
listOfA.sort(Comparator.comparing(a -> a.field1));