Java - sort 메서드

List<List<Integer>> 두 개 이상 기준으로 정렬

Comparator 인터페이스를 구현한 익명 내부 클래스 또는 람다 표현식을 사용하여 정렬 기준을 정의할 수 있다.

class SortPractice {

    public static void execute() {


        List<List<Integer>> lists = new ArrayList<>(Arrays.asList(
            Arrays.asList(2,354),
            Arrays.asList(2,0),
            Arrays.asList(3,354),
            Arrays.asList(2,54),
            Arrays.asList(1,4)
        ));

        System.out.println("Before : " + lists);

        System.out.println("After : " + sortByLambda(lists));
    }

    public static List<List<Integer>> sortByComparator(List<List<Integer>> lists) {
        
        lists.sort(new Comparator<List<Integer>>() {
            @Override
            public int compare(List<Integer> o1, List<Integer> o2) {
                if (!o1.get(0).equals(o2.get(0)))
                    return o1.get(0) - o2.get(0);
                else
                    return o1.get(1) - o2.get(1);
            }
        });

        return lists;
    }

    public static List<List<Integer>> sortByLambda(List<List<Integer>> lists) {
        lists.sort((l1, l2) -> {
            if (l1.get(0).equals(l2.get(0)))
                return l1.get(1) - l2.get(1);
            else
                return l1.get(0) - l2.get(0);
        });

        return lists;
    }


}

HashMap Value 기준으로 정렬

Comparator를 사용하거나 HashMap.Entry에 정의된 메서드를 사용하면 된다.

private static List<HashMap.Entry<String, Integer>> sortByValueInLambda(HashMap<String, Integer> map) {
    List<HashMap.Entry<String, Integer>> entryList = new ArrayList<>(map.entrySet());
    entryList.sort((o1, o2) -> o1.getValue().compareTo(o2.getValue()));
    return entryList;
}

private static List<HashMap.Entry<String, Integer>> sortByValue(HashMap<String, Integer> map) {
    List<HashMap.Entry<String, Integer>> list = new ArrayList<>(map.entrySet());
    list.sort(HashMap.Entry.comparingByValue());
    return list;
}

HashMap Key 기준으로 정렬

Comparator를 사용하여 정렬하면 된다. 람다 표현식을 사용하면 더 간결하다.

private static List<HashMap.Entry<String, Integer>> sortByKey(HashMap<String, Integer> map) {
    List<HashMap.Entry<String, Integer>> entryList = new ArrayList<>(map.entrySet());
    entryList.sort((o1, o2) -> o1.getKey().compareTo(o2.getKey()));
    return entryList;
}

reference

Comments