比较器使用我的类的String字段进行比较?

时间:2011-07-31 14:28:18

标签: java string comparator

我有一个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类型的字段进行排序。

我该怎么做?

4 个答案:

答案 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));