Comparator 객체를 생성하여 Collections나 배열 등을 정렬할 수 있습니다.
Comparator는 다음 두가지 방법으로 만들 수 있습니다.
- 익명 클래스
- 람다식
익명 클래스로 Comparator 생성
익명클래스로 Comparator를 생성할 수 있습니다. compare()
의 리턴 값은 음수, 양수, 0이 될 수 있습니다.
음수가 리턴되면 오른쪽 인자가 아래로 내려갑니다.
public void comparatorExample1() {
List<String> strings = new ArrayList<>();
strings.add("This code is free software");
strings.add("you can redistribute it");
strings.add("under the terms of the GNU General Public License version 2 only");
strings.add("This code is distributed in the hope that it will be useful");
strings.add("Please contact Oracle");
strings.add("500 Oracle Parkway, Redwood Shores, CA 94065 USA");
// Sorting 하기 전에 출력
for (String str : strings) {
System.out.println(str);
}
// 문자 길이로 sorting (오름차순)
Collections.sort(strings, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
return s1.length() - s2.length();
}
});
// sorting 후 출력
System.out.println();
for (String str : strings) {
System.out.println(str);
}
}
결과
This code is free software
you can redistribute it
under the terms of the GNU General Public License version 2 only
This code is distributed in the hope that it will be useful
Please contact Oracle
500 Oracle Parkway, Redwood Shores, CA 94065 USA
Please contact Oracle
you can redistribute it
This code is free software
500 Oracle Parkway, Redwood Shores, CA 94065 USA
This code is distributed in the hope that it will be useful
under the terms of the GNU General Public License version 2 only
람다식(Lambda)으로 Comparator 생성
익명 클래스는 람다식으로 표현할 수도 있습니다.
public void comparatorExample2() {
List<String> strings = new ArrayList<>();
strings.add("This code is free software");
strings.add("you can redistribute it");
strings.add("under the terms of the GNU General Public License version 2 only");
strings.add("This code is distributed in the hope that it will be useful");
strings.add("Please contact Oracle");
strings.add("500 Oracle Parkway, Redwood Shores, CA 94065 USA");
// Sorting 하기 전에 출력
for (String str : strings) {
System.out.println(str);
}
// 문자 길이로 sorting (오름차순)
Collections.sort(strings, (s1, s2) -> s1.length() - s2.length());
// sorting 후 출력
System.out.println();
for (String str : strings) {
System.out.println(str);
}
}
결과
This code is free software
you can redistribute it
under the terms of the GNU General Public License version 2 only
This code is distributed in the hope that it will be useful
Please contact Oracle
500 Oracle Parkway, Redwood Shores, CA 94065 USA
Please contact Oracle
you can redistribute it
This code is free software
500 Oracle Parkway, Redwood Shores, CA 94065 USA
This code is distributed in the hope that it will be useful
under the terms of the GNU General Public License version 2 only
Comparable과 차이점
Comparable은 인터페이스로, 이 인터페이스를 클래스가 구현하면 리스트 등을 정렬하는데 사용할 수 있습니다.
public interface Comparable<T> {
public int compareTo(T o);
}
다음과 같이 Comparable
public class Text implements Comparable<Text> {
private String mText;
public Text(String text) {
mText = text;
}
public String getText() {
return mText;
}
@Override
public int compareTo(@NotNull Text right) {
return getText().length() - right.getText().length();
}
}
그리고 다음과 같이 Collections.sort()
를 호출하여 정렬할 수 있습니다.
public void comparableExample1() {
List<Text> texts = new ArrayList<>();
texts.add(new Text("This code is free software"));
texts.add(new Text("you can redistribute it"));
texts.add(new Text("under the terms of the GNU General Public License version 2 only"));
texts.add(new Text("This code is distributed in the hope that it will be useful"));
texts.add(new Text("Please contact Oracle"));
texts.add(new Text("500 Oracle Parkway, Redwood Shores, CA 94065 USA"));
// Sorting 하기 전에 출력
for (Text text : texts) {
System.out.println(text.getText());
}
// 문자 길이로 sorting (오름차순)
Collections.sort(texts);
// sorting 후 출력
System.out.println();
for (Text text : texts) {
System.out.println(text.getText());
}
}
조금 더 자세한 것은 Java - Comparator로 정렬(Sorting)하는 방법를 참고해주세요.
참고
Loading script...
Related Posts
- Java - Unsupported class file major version 61 에러
- Java - String.matches()로 문자열 패턴 확인 및 다양한 예제 소개
- Java - 문자열 공백제거 (trim, replace)
- Java - replace()와 replaceAll()의 차이점
- Java - ArrayList 초기화, 4가지 방법
- Java - 배열 정렬(Sorting) (오름차순, 내림차순)
- Java - 문자열(String)을 비교하는 방법 (==, equals, compare)
- Java - StringBuilder 사용 방법, 예제
- Java - 로그 출력, 파일 저장 방법 (Logger 라이브러리)
- Java IllegalArgumentException 의미, 발생 이유
- Java - NullPointerException 원인, 해결 방법
- Seleninum의 ConnectionFailedException: Unable to establish websocket connection 해결
- Java - compareTo(), 객체 크기 비교
- Java - BufferedWriter로 파일 쓰기
- Java - BufferedReader로 파일 읽기
- Java charAt() 함수 알아보기
- Java - BigInteger 범위, 비교, 연산, 형변환
- Java contains()로 문자(대소문자 X) 포함 확인
- Java - Set(HashSet)를 배열로 변환
- Java - 문자열 첫번째 문자, 마지막 문자 확인
- Java - 문자열 한글자씩 자르기
- Java - 문자열 단어 개수 가져오기
- Java - 1초마다 반복 실행
- Java - 배열을 Set(HashSet)로 변환
- Java - 여러 Set(HashSet) 합치기
- Java - 명령행 인자 입력 받기
- Java - 리스트 역순으로 순회, 3가지 방법
- Java - 특정 조건으로 리스트 필터링, 3가지 방법
- Java - HashMap 모든 요소들의 합계, 평균 계산
- Java - 특정 조건으로 HashMap 필터링
- Java - 싱글톤(Singleton) 패턴 구현
- Java - 숫자 왼쪽에 0으로 채우기
- Java - String 배열 초기화 방법
- Java - 정렬된 순서로 Map(HashMap) 순회
- Java - HashMap에서 key, value 가져오기