자바 List 안에 데이터(래퍼, String)가 아닌 객체 일때 정렬하는 방법

즉 List<String> 또는 List<Integer> 이 아닌 List<Map<String, Object>>을 정렬

 

(키값이 아닌, 데이터를 이용한 정렬)

// Map<String, Object> 객체 4개 생성
Map<String, Object> mapData1 = new HashMap<>();
mapData1.put("name", "데이터 1");
mapData1.put("seq", 1);
		
Map<String, Object> mapData2 = new HashMap<>();
mapData2.put("name", "데이터 2");
mapData2.put("seq", 2);
		
Map<String, Object> mapData3 = new HashMap<>();
mapData3.put("name", "데이터 3");
mapData3.put("seq", 3);
		
Map<String, Object> mapData4 = new HashMap<>();
mapData4.put("name", "데이터 4");
mapData4.put("seq", 4);

// List 에 담음 
List<Map<String,Object>> list = new ArrayList<>();
//넣는 순서 반대로해서 삽입한 점 주목
list.add(mapData4);
list.add(mapData3);
list.add(mapData2);
list.add(mapData1);
	

 

오름차순으로 정렬하고 싶을 떄
//오름 차순으로 정렬하기
Collections.sort(list, new Comparator<Object>() {
	// Comparable 인터페이스를 구현하여 전달
	@Override
	public int compare(Object s1, Object s2) {
		return (Integer)((Map<String,Object>)s1).get("seq") - (Integer)((Map<String,Object>)s2).get("seq");
	}
});
		
System.out.println("============오름 차순============");
for (Map<String, Object> map : list) {
	System.out.println("name : " + map.get("name"));
}

 

내림차순으로 정렬하고 싶을 때
//내림 차순으로 정렬하기
Collections.sort(list, new Comparator<Object>() {
	@Override
	public int compare(Object s1, Object s2) {
		return (Integer)((Map<String,Object>)s2).get("seq") - (Integer)((Map<String,Object>)s1).get("seq");
	}
});

System.out.println("============내림 차순============");
for (Map<String, Object> map : list) {
	System.out.println("name : " + map.get("name"));
}

 

 

결과

결과