Cloudera CDH/CDP 및 Hadoop EcoSystem, Semantic IoT등의 개발/운영 기술을 정리합니다. gooper@gooper.com로 문의 주세요.
*출처 : http://forum.falinux.com/zbxe/index.php?document_srl=572949&mid=lecture_tip
Test2.java소스
package com.gooper.icbms.sda.comm.util;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class Test2 {
/**
* @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("nn===== 이름 오름 차순 정렬 =====n");
for (User temp : users) {
System.out.println(temp);
}
Collections.sort(users, new NameDescCompare());
System.out.printf("nn===== 이름 내림 차순 정렬 =====n");
for (User temp : users) {
System.out.println(temp);
}
Collections.sort(users, new NoAscCompare());
System.out.printf("nn===== No 오름 차순 정렬 =====n");
for (User temp : users) {
System.out.println(temp);
}
Collections.sort(users, new NoDescCompare());
System.out.printf("nn===== No 내림 차순 정렬 =====n");
for (User temp : users) {
System.out.println(temp);
}
Collections.sort(users, new NameAscNoDescCompare());
System.out.printf("nn===== Name asc + No desc 정렬 =====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");
user.setNo(1);
users.add(user);
user = new User();
user.setName("고철수");
user.setAddress("경기도 성남시 분당구");
user.setPhone("010-1234-0192");
user.setNo(5);
users.add(user);
user = new User();
user.setName("박영희");
user.setAddress("부산 해운대");
user.setPhone("010-4234-0192");
user.setNo(2);
users.add(user);
user = new User();
user.setName("감수왕");
user.setAddress("충북 제천");
user.setPhone("010-7234-0192");
user.setNo(3);
users.add(user);
user = new User();
user.setName("이사람");
user.setAddress("강원도 영울");
user.setPhone("010-0234-0192");
user.setNo(4);
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());
}
}
/**
* Name asc + No desc
* @author falbb
*
*/
static class NameAscNoDescCompare implements Comparator<User> {
/**
* Name으로 오름차순(ASC) 정렬후 Name이 같으면 No로 내림차순 정렬(desc)
*/
@Override
public int compare(User arg0, User arg1) {
String name1 = arg0.getName();
String name2 = arg1.getName();
int ret = 0;
ret = name1.compareTo(name2);
if(ret == 0) {
int no1 = arg0.getNo();
int no2 = arg1.getNo();
if(no2 > no1) {
ret = -1;
} else if(no2 > no1) {
ret = 1;
} else {
ret = 0;
}
}
return ret;
}
}
/**
* 이름 내림차순
* @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());
}
}
/**
* 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;
}
}
static class User {
private String name;
private String address;
private String phone;
private int no;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public int getNo() {
return no;
}
public void setNo(int no) {
this.no = no;
}
@Override
public String toString() {
return "User [name=" + name + ", address=" + address + ", phone="
+ phone + ", no=" + no + "]";
}
}
}* 문자열 비교compareTo처럼 숫자도 비교 해서 결과 값을 -1, 0, 1을 리턴 해주면 됩니다.
-1:작다
0:같다
1:크다
-->실행결과
===== 정렬 하기전 ===== User [name=고철수, address=경기도 성남시 분당구, phone=010-1234-0192, no=1] User [name=고철수, address=경기도 성남시 분당구, phone=010-1234-0192, no=5] User [name=박영희, address=부산 해운대, phone=010-4234-0192, no=2] User [name=감수왕, address=충북 제천, phone=010-7234-0192, no=3] User [name=이사람, address=강원도 영울, phone=010-0234-0192, no=4] ===== 이름 오름 차순 정렬 ===== User [name=감수왕, address=충북 제천, phone=010-7234-0192, no=3] User [name=고철수, address=경기도 성남시 분당구, phone=010-1234-0192, no=1] User [name=고철수, address=경기도 성남시 분당구, phone=010-1234-0192, no=5] User [name=박영희, address=부산 해운대, phone=010-4234-0192, no=2] User [name=이사람, address=강원도 영울, phone=010-0234-0192, no=4] ===== 이름 내림 차순 정렬 ===== User [name=이사람, address=강원도 영울, phone=010-0234-0192, no=4] User [name=박영희, address=부산 해운대, phone=010-4234-0192, no=2] User [name=고철수, address=경기도 성남시 분당구, phone=010-1234-0192, no=1] User [name=고철수, address=경기도 성남시 분당구, phone=010-1234-0192, no=5] User [name=감수왕, address=충북 제천, phone=010-7234-0192, no=3] ===== No 오름 차순 정렬 ===== User [name=고철수, address=경기도 성남시 분당구, phone=010-1234-0192, no=1] User [name=박영희, address=부산 해운대, phone=010-4234-0192, no=2] User [name=감수왕, address=충북 제천, phone=010-7234-0192, no=3] User [name=이사람, address=강원도 영울, phone=010-0234-0192, no=4] User [name=고철수, address=경기도 성남시 분당구, phone=010-1234-0192, no=5] ===== No 내림 차순 정렬 ===== User [name=고철수, address=경기도 성남시 분당구, phone=010-1234-0192, no=5] User [name=이사람, address=강원도 영울, phone=010-0234-0192, no=4] User [name=감수왕, address=충북 제천, phone=010-7234-0192, no=3] User [name=박영희, address=부산 해운대, phone=010-4234-0192, no=2] User [name=고철수, address=경기도 성남시 분당구, phone=010-1234-0192, no=1] ===== Name asc + No desc 정렬 ===== User [name=감수왕, address=충북 제천, phone=010-7234-0192, no=3] User [name=고철수, address=경기도 성남시 분당구, phone=010-1234-0192, no=1] User [name=고철수, address=경기도 성남시 분당구, phone=010-1234-0192, no=5] User [name=박영희, address=부산 해운대, phone=010-4234-0192, no=2] User [name=이사람, address=강원도 영울, phone=010-0234-0192, no=4]