-
[JAVA] 객체 정렬 ComparatorJAVA 2018. 8. 29. 12:37
* Comparator
=> 기본정렬기준 외에 다른 여러 기준으로 정렬하고자 할때 사용하는 클래스
단순 리스트를 정렬할때 보통 Collections.sort()를 사용한다 //오름차순
ArrayList<String> list = new ArrayList<String>();
list.add("d");
list.add("c");
list.add("b");
list.add("a");
Collections.sort(list);
출력시: abcd
하지만 개발을 하다보면
1234567891011public class User{private String name;private int grade;private int no; //생략....}cs 이러한 형태의 VO를 List에 담기도 한다만약에 아래와 같은 코드가 있다고 하자List<UserVO> list = memberService.getUserList();여기서Collections.sort(list);를 실행하게 된다면?에러가발생한다.왜냐하면 어떤 기준으로 정렬할지 모르기 때문이다.단순 정렬이라면 Comparable을 사용해도되고, 다른 여러가지 조건을 더주려면 Comparator을 사용하면된다.형태는 Collections.sort(객체, new Comparator<타입>(){} 선언하고compare메소드를 구현하면 된다.public int compare(User u1, User u2)메소드는 반환형이양수이면 u1과 u2의 자리를 바꾸고음수이면 u1과 u2의 자리를 바꾸지않는다* 사용예제
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141package test_java;import java.io.IOException;import java.util.Collections;import java.util.Comparator;import java.util.List;import org.apache.commons.lang3.builder.CompareToBuilder;public class Main {public static void main(String[] args) throws IOException{List<User> list= getCreateUsers();System.out.println("@@@정렬전@@@");for(User data : list) {System.out.print(data.getNo());}System.out.println();System.out.println("@@@숫자 내림차순 정렬@@@");Collections.sort(list, new Comparator<User>() {public int compare(User o1, User o2) {if(o1.getNo()>o2.getNo()) {return -1;}else if(o1.getNo()<o2.getNo()) {return 1;}else {return 0;}}});for(User data : list) {System.out.print(data.getNo());}System.out.println();System.out.println("@@@숫자 오름차순 정렬@@@");Collections.sort(list, new Comparator<User>() {public int compare(User o1, User o2) {if(o1.getNo()>o2.getNo()) {return 1;}else if(o1.getNo()<o2.getNo()) {return -1;}else {return 0;}}});for(User data : list) {System.out.print(data.getNo());}System.out.println();System.out.println("@@@이름 오름차순@@@");Collections.sort(list, new Comparator<User>(){public int compare(User o1, User o2) {return o1.getName().compareTo(o2.getName());}});for(User data : list) {System.out.print(data.getName()+",");}System.out.println();System.out.println("@@@이름 내림차순@@@");Collections.sort(list, new Comparator<User>(){public int compare(User o1, User o2) {return o2.getName().compareTo(o1.getName());}});for(User data : list) {System.out.print(data.getName()+",");}System.out.println();System.out.println("@@@ 점수 내림차순 + 이름 오름차순@@@");Collections.sort(list, new Comparator<User>() {public int compare(User o1, User o2) {if(o1.getGrade()>o2.getGrade()) {return -1;}else if(o1.getGrade()<o2.getGrade()) {return 1;}else {if(o1.getGrade()==o2.getGrade()) {return o1.getName().compareTo(o2.getName());}else {return 0;}}}});for(User data : list) {System.out.println("이름:"+data.getName()+"/"+"점수:"+data.getGrade());}}private static List<User> getCreateUsers() {List<User> users = new ArrayList<User>();User user = new User();user.setName("나씨");user.setGrade(50);user.setNo(1);users.add(user);user = new User();user.setName("라씨");user.setGrade(100);user.setNo(2);users.add(user);user = new User();user.setName("가씨");user.setGrade(100);user.setNo(3);users.add(user);user = new User();user.setName("다씨");user.setNo(4);user.setGrade(1);users.add(user);return users;}}// CLASS ENDcs 'JAVA' 카테고리의 다른 글
[JAVA] 람다식과 함수형 인터페이스 (0) 2018.11.11 [JAVA] 람다식이란? 그리고 사용법! (0) 2018.11.11 [JAVA] LocalDate, LocalDateTime 사용법 (0) 2018.11.05 [JAVA] final 멤버 변수는 상수가 아니다 (0) 2018.10.25 [소스코드 보안 취약점]적절하지 않은 난수 값 사용 (0) 2018.10.21