여러 가지 정렬 방법
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;
}
Comments