본문 바로가기

work/Java

Collection의 Sort 사용하기

*반드시 Compare를 구현할 것


package study.sort; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.LinkedList; import java.util.List; /* * 간단하게 학생 이름과 나이를 담는 POJO Class */ class Student { private String name; private int age; public Student( String name, int age ) { this.name = name; this.age = age; } public String getName() { return this.name; } public void setName( String name ) { this.name = name; } public int getAge() { return this.age; } public void setAge( int age ) { this.age = age; } @Override public String toString() { return this.getName() + "(" + this.getAge() + ")"; } } /** * Sorter 예제 * 이름 오름차순으로 정렬하고, 이름이 같은 경우 나이 내림차순으로 정렬하는 예제. * 내림차순의 경우 Comparator의 left와 right 연산 위치를 바꾸면 됨. * 즉, Comparator의 return값이 음수, 0, 양수 각각의 경우에 따라 정렬되는 것이 다름. * * 예를 들어 left - right가 음수이면 right가 더 큰 경우가 된다. */ public class SortExample { public SortExample() { } /** * List 정렬 * * @param list * 정렬할 리스트 */ public void sort( List<Student> list ) { Collections.sort( list, new Comparator<Student>() { @Override public int compare( Student left, Student right ) { if( left.getName().equals( right.getName() ) ) { return right.getAge() - left.getAge(); } return left.getName().compareTo( right.getName() ); } } ); } /** * 1차원 배열 정렬 * * @param students * 1차원 배열( 원소 유형은 Student ) */ public void sort( Student[] students ) { Arrays.sort( students, new Comparator<Student>() { @Override public int compare( Student left, Student right ) { if( left.getName().equals( right.getName() ) ) { return right.getAge() - left.getAge(); } return left.getName().compareTo( right.getName() ); } } ); } /** * 2차원 배열 정렬 * * @param strings * String[][] 형태의 2차원 배열( [ 이름, 나이 ] 형식 ) */ public void sort( String[][] strings ) { Arrays.sort( strings, new Comparator<String[]>() { @Override public int compare( String[] left, String[] right ) { if( left[ 0 ].equals( right[ 0 ] ) ) { return Integer.parseInt( right[ 1 ] ) - Integer.parseInt( left[ 1 ] ); } return left[ 0 ].compareTo( right[ 0 ] ); } } ); } /** * List 출력 메소드 * * @param headerMessage * @param list */ public void printOut( String headerMessage, List<Student> list ) { System.out.print( headerMessage + "(리스트 정렬) : " ); System.out.println( list ); } /** * 1차원 배열 출력 메소드 * * @param headerMessage * @param students */ public void printOut( String headerMessage, Student[] students ) { System.out.print( headerMessage + "(1차원 배열 정렬) : " ); for( int i = 0 ; i < students.length ; i++ ) { System.out.print( students[ i ] ); if( i != students.length - 1 ) { System.out.print( ", " ); } } System.out.println(); } /** * 2차원 배열 출력 메소드 * * @param headerMessage * @param strings */ public void printOut( String headerMessage, String[][] strings ) { System.out.print( headerMessage + "(2차원 배열 정렬) : " ); for( int i = 0 ; i < strings.length ; i++ ) { System.out.print( strings[ i ][ 0 ] + "(" + strings[ i ][ 1 ] + ")" ); if( i != strings.length - 1 ) { System.out.print( ", " ); } } System.out.println(); } public static void main( String[] args ) { /* Data 생성 */ //@formatter:off Student[] students = new Student[] { new Student( "홍길동", 35 ) , new Student( "김개똥", 10 ) , new Student( "홍길동", 20 ) , new Student( "이상만", 13 ) , new Student( "박대기", 12 ) }; //@formatter:on List<Student> list = new LinkedList<>(); for( Student s : students ) { list.add( s ); } String[][] strings = new String[ students.length ][ 2 ]; for( int i = 0 ; i < students.length ; i++ ) { strings[ i ] = new String[] { students[ i ].getName(), String.valueOf( students[ i ].getAge() ) }; } /* * 이름순으로 오름차순 정렬하고, 이름이 같은경우 나이 순으로 오름차순 정렬 */ SortExample example = new SortExample(); // List 정렬 예시 example.printOut( "정렬 전", list ); example.sort( list ); example.printOut( "정렬 후", list ); System.out.println( "=========================" ); // 1차원 배열 정렬 예시 example.printOut( "정렬 전", students ); example.sort( students ); example.printOut( "정렬 후", students ); System.out.println( "=========================" ); // 2차원 배열 정렬 예시 example.printOut( "정렬 전", strings ); example.sort( strings ); example.printOut( "정렬 후", strings ); } }


'work > Java' 카테고리의 다른 글

Java로 HTTP Post 발송  (0) 2023.05.25
특정 문자의 빈도 수 체크하기  (0) 2018.04.16
문자/숫자 판별 정규식(코드포함)  (0) 2018.04.10
Eclipse에서 한글을 찾고 싶을 때  (0) 2012.10.26
JMX vi RMI  (0) 2012.08.08