2014-10-30 3 views
0

marks 필드를 기준으로 Emp 객체 목록을 오름차순으로 정렬하고 싶습니다.Java에서 객체 목록 정렬

List<Emp> emp= new ArrayList<Emp>(); 

public class Emp implements Serializable { 
    private String empname; 
    private String section; 
    private int empId; 
    private int marks; 
    ... 
+0

그럼 어떻게 했습니까? 문제가 무엇입니까? – FunctionR

+0

http://stackoverflow.com/questions/10302005/any-utility-method-to-sort-java-util-list-containing-pojos-of-the-kind-of-apache – ekiyanov

답변

0

Java에서 개체 비교를 지원하는 두 가지 주요 방법이 있습니다.

클래스에 사용자가 의존하는 자연 순서 (예 : 문자열의 사전 순 정렬)가있을 때 허용되는 Comparable 인터페이스를 구현하게 할 수 있습니다. 이를 위해서는 클래스가 인스턴스 간 비교 규칙을 정의하는 compareTo 메소드를 구현해야합니다.

표준 대안은 클래스에 Comparator을 인스턴스화하고 compare 방법으로 비교 규칙을 지정하는 것입니다.

귀하의 경우, 후자의 옵션이 더 적합 해 보입니다. compare 메쏘드의 메카니즘은 상당히 간단합니다 : 클래스의 두 인스턴스를 취하고, 첫 번째가 두 번째보다 작 으면 음의 값을 반환하고, "더 크면"양수를 반환하고 "같으면"0을 반환합니다 ". marks과 같이 비교하는 정수 기반 비교의 경우 빠른 차이는 숫자의 차이를 반환하는 것입니다.

당신이 당신의 Comparator 정의, 분류가 List하고 지정된 Comparator 걸리는 방법 서명 말인가는 Collections.sort 메소드를 호출하는 것만 큼 간단 일단.

List<Emp> emps = new ArrayList<Emp>(); 
// populate list... 

Comparator<Emp> empComparator = new Comparator<Emp>() { 
    public int compare(Emp e1, Emp e2) { 
     return e2.getMarks() - e2.getMarks(); 
    } 
}; 

Collections.sort(emps, empComparator); 
2

비교기를 작성해야합니다. 그렇지 않으면 Sort 메서드는 정렬 할 때 사용할 필드를 가정합니다.

필자는 필드 표시를 공용으로 처리 했으므로 선택하면 one.marks를 getter로 바꿉니다. 또한

당신은 compareTo와이없는의 int를 사용하고 있기 때문에,과 같이 수행

 Collections.sort(list, new Comparator<Emp>() { 
     public int compare(Emp one, Emp two) { 
      int cmp = one.getMarks() > two.getMarks() ? +1 : one.getMarks() < two.getMarks() ? -1 : 0; 
      return cmp; 
     } 
    }); 
1

당신은 정렬 비교기 개체를 사용할 수 있습니다.

Collections.sort(); 

정렬을 수행합니다.

귀하의 목록과 함께 작동합니다. 사용할 메소드는 compareTo입니다.

if (list.size() > 0) { 
    Collections.sort(list, new Comparator<Emp>() { 
     @Override 
     public int compare(final Emp object1, final Emp object2) { 
      return object1.getMarks().compareTo(object2.getMarks()); 
     } 
     }); 
    }