Comparator< T >

uuuouuo·2022년 5월 16일

📍 Comparator< T > 정렬


✔ 코드

Arrays.sort(files, new Comparator<String>() { // String에 대해 정렬할 경우
    @Override
    public int compare(String o1, String o2) {

        int result = o1.compareTo(o2);

        if(result == 0) {
            // 문제에 따른 구현           
        }
        return result;
    }

});

+ 람다식 코드

Arrays.sort(files, (o1, o2) -> {

    int result = o1.compareTo(o2);

    if(result == 0) {
        // 문제에 따른 구현           
    }
    return result;
});

✔ 문제 응용 예시 (프로그래머스: 파일명 정렬)

import java.util.*;
class Solution {
    public String[] solution(String[] files) {

        Arrays.sort(files, (f1, f2) -> {
                String h1 = f1.split("[0-9]")[0];
                String h2 = f2.split("[0-9]")[0];
                
                int result = h1.toLowerCase().compareTo(h2.toLowerCase());
                
                if(result == 0) 
                    result = getNum(f1, h1) - getNum(f2, h2);               
                    
                return result;     
        });
        return files;
    }
    
    static int getNum(String file, String head) {
        
        file = file.replace(head, "");
        String result = "";
        
        for(char c : file.toCharArray()) {
            
            // 숫자 확인 & 길이 확인 !
            if(!Character.isDigit(c) 
               || result.length() > 5) break;
            result += c;
        }
        
        return Integer.parseInt(result);
    }
}
  • 문자열 배열.toCharArray() : 한 문자씩 나뉘어 배열 생성
  • Character.isDigit(c) : 해당 문자가 숫자인지 판별

0개의 댓글