2014-04-04 3 views
3

개체를 비교할 수있는 개체로 만들고 싶습니다. (이 경우 TreeSet에서 사용하는 것이 좋습니다.)Comparable을 구현하여 문자열로 알파벳순 정렬 받기

내 개체에 이름 필드가있어 알파벳순으로 정렬하고 싶습니다.

public final class MyObject implements Comparable<MyObject> { 

private String name; 

public MyObject(String name) { 
    this.name = name; 
} 

public String name() { 
    return name; 
} 

@Override 
public int compareTo(MyObject otherObject) { 
    return WHAT DO I PUT HERE ?; 
} 
} 

감사 : 나는 어떻게 시작

나는

여기

은 ... 내가 문자열의 유니 코드 값을 사용하여 간단하게 뺄셈을 수행하지만 AA 예를 들어 Ab의 후 될 수 있다는 것을 처음 생각 도와 줄 사람들에게, 좋은 하루 되세요!

+3

힌트 같은 것을 원한다고 생각 : 'String'는 구현'대등 '... – ppeterka

+1

나는 당신의 다음 질문에 대한 제목에서 언어 제거 : 사용 태그 사용되는 언어를 지정하기를 제목이 아닙니다. –

답변

17

문제는 지나치지 않습니다. String들 알파벳입니다 자신의 자연 순서를 가지고, 그래서 당신은 그냥이 같은 String.compareTo를 사용할 수 있습니다

@Override 
public int compareTo(MyObject otherObject) { 
    return this.name.compareTo(otherObject.name); 
} 
+0

아, 그게 내가 필요한 것 같다. 빠른 답변 감사합니다. –

+0

그는 올바른 코드로 처음 대답 한 이래로이 질문을 답변없이 유지하기 위해 자신의 대답을 받아 들여야합니다. (V 투표를 눌러야합니다.) –

+0

10 분 지연되어 직접 수락 할 수 없었습니다 ...하지만 이제 끝났습니다. –

4
return name.compareTo(otherObject.name); 

문자열은 이미 당신은 아무것도 할 필요가 없습니다 Comparable을 구현합니다.

1

난 당신이

package mine; 

import java.util.ArrayList; 
import java.util.Collections; 
import java.util.Comparator; 
import java.util.List; 

public class MyObject { 
    private String name; 

    public MyObject(String name) { 
     this.name = name; 
    } 

    public MyObject() { 
     // TODO Auto-generated constructor stub 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 



    @Override 
    public String toString() { 
     return "MyObject [name=" + name + "]"; 
    } 

    public static void main(String[] args){ 
     List<MyObject> l = new ArrayList<>(); 
     l.add(new MyObject("Ab")); 
     l.add(new MyObject("AA")); 
     l.add(new MyObject()); 

     Collections.sort(l, new Comparator<MyObject>(){ 

      @Override 
      public int compare(MyObject o1, MyObject o2) { 
       if (o1.name == null && o2.name == null){ 
        return 0; 
       }else if (o1.name == null){ 
        return -1; 
       }else if (o2.name == null){ 
        return 1; 
       }else{ 
        return o1.name.toUpperCase().compareTo(o2.name.toUpperCase()); 
       } 
      } 

     }); 

     System.out.println(l); 
    } 
}