2011-07-31 47 views
0

我有一个类型为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类型的字段订购。

我该怎么做?

+1

由于整数溢出,在'compareTo'方法中使用减法通常是危险的。改用Google的Guava中的'Ints.compare'。 –

+1

@Roland或只是''''='和'<' –

+0

是的,但是在'<=>'的情况下,您必须明确说明运算符和结果。我发现写'return Ints.compare(a,b)'更容易。 –

回答

2

或者你的类可以实现接口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); 

哪个IMO是最好/如果A总是按字段1排序,则更干净。