[Java]Collections.sort로 정렬하기(문자열, 숫자)
아래는 출처에 있는 내용을 그대로 가지고 왔습니다..
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
java에서 List정렬에 대해 알아보도록 하겠습니다.
Collections.sort를 사용하면 쉽게 정렬할수 있습니다.
Collections이기때문에 Collection을 implements 하는 List, Map, Vector등을 정렬할 수 있습니다.
정렬 하기 위해서는 Comparator을 implements해서 사용하면 됩니다.
예제를 보고 잘 따라해보세요.
먼저 이름, 주소, 전화번호를 갖고 있는 오브젝트를 만듭니다.
public class User { private String name; private String address; private String phone; public User() { } /** * @return the name */ public String getName() { return name; } /** * @param name the name to set */ public void setName(String name) { this.name = name; } /** * @return the address */ public String getAddress() { return address; } /** * @param address the address to set */ public void setAddress(String address) { this.address = address; } /** * @return the phone */ public String getPhone() { return phone; } /** * @param phone the phone to set */ public void setPhone(String phone) { this.phone = phone; } @Override public String toString() { // TODO Auto-generated method stub StringBuilder str = new StringBuilder(); str.append("name=").append(name).append(", "); str.append("address=").append(address).append(", "); str.append("phone=").append(phone); return str.toString(); } }
그다음은 메인 소스입니다.
[샘플소스]
import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; public class JavaCompareTest { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub List<User> users = getCreateUsers(); System.out.println("===== 정렬 하기전 ====="); for (User temp : users) { System.out.println(temp); } Collections.sort(users, new NameAscCompare()); System.out.printf("\n\n===== 오름 차순 정렬 =====\n"); for (User temp : users) { System.out.println(temp); } Collections.sort(users, new NameDescCompare()); System.out.printf("\n\n===== 내림 차순 정렬 =====\n"); for (User temp : users) { System.out.println(temp); } } /** * User Data Create * @return */ private static List<User> getCreateUsers() { // TODO Auto-generated method stub List<User> users = new ArrayList<User>(); User user = new User(); user.setName("고철수"); user.setAddress("경기도 성남시 분당구"); user.setPhone("010-1234-0192"); users.add(user); user = new User(); user.setName("박영희"); user.setAddress("부산 해운대"); user.setPhone("010-4234-0192"); users.add(user); user = new User(); user.setName("감수왕"); user.setAddress("충북 제천"); user.setPhone("010-7234-0192"); users.add(user); user = new User(); user.setName("이사람"); user.setAddress("강원도 영울"); user.setPhone("010-0234-0192"); users.add(user); return users; } /** * 이름 오름차순 * @author falbb * */ static class NameAscCompare implements Comparator<User> { /** * 오름차순(ASC) */ @Override public int compare(User arg0, User arg1) { // TODO Auto-generated method stub return arg0.getName().compareTo(arg1.getName()); } } /** * 이름 내림차순 * @author falbb * */ static class NameDescCompare implements Comparator<User> { /** * 내림차순(DESC) */ @Override public int compare(User arg0, User arg1) { // TODO Auto-generated method stub return arg1.getName().compareTo(arg0.getName()); } } }
[실행 결과]
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
만약 숫자 비교를 원한다면..
User이란 오브젝트에는 숫자가 없기 때문에 추가
public class User { private String name; private String address; private String phone; private int no; // 추가 ......
Collections.sort(users, new NoAscCompare()); System.out.printf("\n\n===== 숫자 오름 차순 정렬 =====\n"); for (User temp : users) { System.out.println(temp); } Collections.sort(users, new NoDescCompare()); System.out.printf("\n\n===== 숫자 내림 차순 정렬 =====\n"); for (User temp : users) { System.out.println(temp); }
/** * No 오름차순 * @author falbb * */ static class NoAscCompare implements Comparator<User> { /** * 오름차순(ASC) */ @Override public int compare(User arg0, User arg1) { // TODO Auto-generated method stub return arg0.getNo() < arg1.getNo() ? -1 : arg0.getNo() > arg1.getNo() ? 1:0; } } /** * No 내림차순 * @author falbb * */ static class NoDescCompare implements Comparator<User> { /** * 내림차순(DESC) */ @Override public int compare(User arg0, User arg1) { // TODO Auto-generated method stub return arg0.getNo() > arg1.getNo() ? -1 : arg0.getNo() < arg1.getNo() ? 1:0; } }
문자열 비교compareTo처럼 숫자도 비교 해서 결과 값을 -1, 0, 1을 리턴 해주면 됩니다.
-1:작다
0:같다
1:크다
간단하죠? 알면 간단 합니다. ^^
[실행 결과]
'자바 일반' 카테고리의 다른 글
json gson (0) | 2014.08.25 |
---|---|
InputStream 을 String 으로 변환하기 (0) | 2014.08.25 |
HashSet 사용시 중복 여부 판별 부여 방법 (0) | 2014.07.16 |
java.util.ConcurrentModificationException for each문을 통한 컬렉션 삭제시 (0) | 2013.08.01 |
헤드퍼스트 자바, 디자인패턴 소스 (0) | 2013.07.01 |