public static class Block { int areaSize, height, weight; // Block(int areaSize, int height, int weight){ this.areaSize = areaSize; this.height = height; this.weight = weight; } }
int n = scanner.nextInt(); List<Block> blocks = new ArrayList<>(); //블록의 객체 리스트 int areaSize, height, weight; // for(int i = 0; i < n; i++){ areaSize = scanner.nextInt(); height = scanner.nextInt(); weight = scanner.nextInt(); blocks.add(new Block(areaSize, height, weight)); //객체 리스트에 추가 }
위와 같이 Block 이라는 클래스가 있는데, 넓이, 높이, 무게를 저장하는 클래스이다.
이 클래스의 객체를 여러개 ArrayList로 입력받아 areaSize를 기준으로 정렬하고자 한다.
이와 같이 객체의 어떤 멤버변수를 기준으로 객체를 정렬하고자 할 때, 어떻게 해야 하는지 알아보자.
Comparator<Block> comparator = new Comparator<Block>() { @Override public int compare(Block o1, Block o2) { return o2.areaSize - o1.areaSize; } }; // Collections.sort(blocks, comparator); //정렬
Comparator 인터페이스 구현체를 Collections.sort()나 Arrays.sort()에 추가 인자로 넘기면 새로운 정렬 기준으로 객체를 정렬한다. Compare함수는 두 개의 인자를 받아서 첫번째 인자가 두번째 인자보다 작으면 -1, 같으면 0, 크면 1을 리턴하는데 이는 오름차순 정렬이다. 이 함수를 오버라이딩하여 return 두번째 인자 - 첫번째 인자 로 바꾸면 내림차순 정렬이 된다.