2013-10-31 2 views

답변

3

collections.sort() 할 수 있습니까?

네,하지만, 당신이 최고의 값을 추출하고이 개념의 아주 기본적인 예입니다

적절하게 비교하기 위해 사용자 정의 Comparator을해야 ...

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

public class CustomSorter { 

    public static void main(String[] args) { 
     List<String> values = new ArrayList<>(25); 
     values.add("12,Vanilla granola bar,91"); 
     values.add("1,Vanilla granola bar,91"); 
     values.add("50,Vanilla granola bar,91"); 
     values.add("25,Vanilla granola bar,91"); 
     values.add("13,Vanilla granola bar,91"); 

     dump(values); 

     Collections.sort(values, new SplitComparator()); 

     dump(values); 
    } 

    protected static void dump(List<String> values) { 
     System.out.println(values); 
    } 

    public static class SplitComparator implements Comparator<String> { 

     @Override 
     public int compare(String o1, String o2) { 
      int i1 = getIndex(o1); 
      int i2 = getIndex(o2); 

      return i1 - i2; 
     } 

     protected int getIndex(String o1) { 
      return Integer.parseInt(o1.split(",")[0]); 
     } 
    } 
} 

잘못 될 수있는 것들이 너무 많아서 재미 있지는 않습니다. 나는 비교 될 String 중 하나를 실제로 확인하기 위해 수표를 만들지 않았고, Comparator의 요구 사항을 실제로 충족시키지 않았으며 첫 번째 요소가 숫자가 아닌 경우도 처리하지 않았습니다.

더 좋은 해결책은 String 값을 POJO 또는 interface으로 랩핑하고 적절한 적절한 게터를 제공하는 것입니다. 이렇게하면 Comparator을 특정 유형의 클래스로 제한하여 더 안전하게 만들 수 있습니다.

+0

aaargg ... 나는 5 분 LOL 씩 늦었습니다. –

+0

@LittleChild 그 일이 발생하면 싫어하지 마세요) – MadProgrammer

+0

hahaha 때 훨씬 더 –

관련 문제