2015-10-08 48 views
1

例如排序:整数使用集合,使用自定义类在Java中

class A{ 
    public int a; 
    public String b; 

    public A(int a, String b){ 
     this.a = a; 
     this.b = b; 
    } 
} 


main(){ 
    List<A> list = new Arraylist<>(); 
    list.add(new A(5, "abc")); 
    list.add(new A(1, "aee")); 
    list.add(new A(3, "adf")); 
    list.add(new A(6, "aad")); 
    list.add(new A(2, "xx")); 
} 

有没有办法使用integerA class排序此list升序排列。我已经试过

Collection.sort(list)但得到一些语法错误。我做错了什么。

回答

1

你需要一个定制Comparator实现:

Collections.sort(list, new Comparator<A>() { 
    public int compare(A first, A second) { 
     return Integer.compare(first.a, second.a); 
    } 
}); 
+1

'return Integer.compare(first.a,second.a)'避免不必要的'整数'创建。 –

1

使用Java8 List.sort和比较器Lambda表达式可以这样写:

list.sort((a1,a2) -> a1.a - a2.a); 
0

使用自定义Comparator

Collections.sort(list, new Comparator<A>() { 

       @Override 
       public int compare(A o1, A o2) { 

       if(o1.a==o2.a){ 
        return 0; 
       }else { 
        return o1.a>o2.a?1:-1; 
       } 
       } 

      }); 
+0

你的比较器不是不反对称的:它应该为'o1.a == o2.a'返回0。 'Integer.compare(o1.a,o2.a)'更容易。 –

+0

@AndyTurner是的,你是对的。 – Rustam

0
List<A> listElements = new ArrayList<>(); 
    listElements.add(new A(5, "abc")); 
    listElements.add(new A(1, "aee")); 
    listElements.add(new A(3, "adf")); 
    listElements.add(new A(6, "aad")); 
    listElements.add(new A(2, "xx")); 
    //Sorting 
    Collections.sort(listElements, new Comparator<Pourtest.A>() { 
     @Override 
     public int compare(A o1, A o2) { 
      return Integer.compare(o1.a, o2.a); 
     } 
    }); 
    //Verify 
    for (A listElement : listElements) { 
     System.out.println(listElement.a); 
    } 
+0

你的比较器不是不反对称的:它应该为o1.a == o2.a返回0。 Integer.compare(o1.a,o2.a)更容易。 –