[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());
		}
 
	}
}



[실행 결과]

Collections.sort.png 



@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

만약 숫자 비교를 원한다면..


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:크다


간단하죠?  알면 간단 합니다. ^^



[실행 결과]

sortNumber.png 







+ Recent posts