2014-07-18 4 views
0

누군가가 설명 할 수 다른 시나리오에 사용할 코드의 조각을 이해 :이 코드 조각이 어떻게 작동하는지

enum MyStringComparator implements Comparator<String> { 
    INSTANCE; 

    @Override 
    public int compare(String s1, String s2) { 
     int n1 = Integer.parseInt(s1.split("\\.")[2]); 
     int n2 = Integer.parseInt(s2.split("\\.")[2]); 
     return Integer.compare(n1, n2); 
    } 
} 

을 나는 그래서 내 이해에서 내가 원하는 것

"7.0.x", 
"14.0.x", 
"13.0.x-version_4", 

를 정렬하는 것을 시도하고있다 x에서 나눠서 그 전에 무엇이 보이는지?

그러므로 나는 다음과 같은 시도 : 나는 숫자 형식의 예외를 가지고 있기 때문에 작동하지 않았다

enum MyStringComparator implements Comparator<String> { 
    INSTANCE; 

    @Override 
    public int compare(String s1, String s2) { 
     int n1 = Integer.parseInt(s1.split("\\.\\.x")[5]); 
     int n2 = Integer.parseInt(s2.split("\\.\\.x")[5]); 
     return Integer.compare(n1, n2); 
    } 
} 

. 나는 그 코드가하는 것을 이해하지 못하고 있다고 생각한다.

답변

1

첫 번째 코드는 점으로 분할 한 다음 각 문자열의 세 번째 구성 요소를보고 정수로 변환하여 비교합니다.

그러나 세 번째 구성 요소가 숫자가 아니기 때문에 x이므로이 경우에는 작동하지 않습니다. 당신이 처음 두 부품을 비교할 경우, 당신은 같은 것을해야 할 것 : 당신은 구아바를 사용하는 경우

String[] parts1 = s1.split("\\."); 
String[] parts2 = s2.split("\\."); 
int comparison = Integer.compare(Integer.parseInt(parts1[0]), Integer.parseInt(parts2[0])); 
if (comparison == 0) { 
    comparison = Integer.compare(Integer.parseInt(parts1[1]), Integer.parseInt(parts2[1])); 
} 
return comparison; 

을, 다음을 수행하십시오

String[] parts1 = s1.split("\\."); 
String[] parts2 = s2.split("\\."); 
return ComparisonChain.start() 
     .compare(Integer.parseInt(parts1[0]), Integer.parseInt(parts2[0])) 
     .compare(Integer.parseInt(parts1[1]), Integer.parseInt(parts2[1])) 
     .result(); 
+0

이 오름차순으로 순서를 반환 , 나는 그것을 순서대로 일어날 수 있을까? 나는 노력했다. Arrays.sort (builds, Collections.reverseOrder()); 첫 번째 정렬을 사용한 후에도 작동하지 않는다면 비교 방법에서 뭔가를해야한다고 가정하고 있습니까? – user3767481

+0

나는 내가 감사해야 할 그 마지막 작품을 해결했다. – user3767481

관련 문제