ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JAVA] DTO(VO) 리스트(list)를 특정 변수에 대해 정렬하기
    JAVA 2020. 12. 14. 23:02

    DTO list 정렬하기, VO list 정렬하기


    안녕하세요? 장장스입니다.

    오늘은 DTO 혹은 VO 라고 부르기도 하죠? DTO(VO) List 정렬에 대한 포스팅입니다. 

    업무를 하다보면 가~끔 본인이 DTO를 특정 변수에 대해 정렬해야 할 때가 있습니다.

    아주 간단하게 Stream을 사용하여 정렬할 수 있답니다.

     

     

     

    DTO(VO) 클래스 정의


    다음과 같이 Student 클래스를 정의합니다. 이름, 수학점수, 영어점수를 기입할 거에요.

    public class Student {
    	String name;
    	int math;
    	int english;
    	
    	//getter, setter
    	public String getName() {
    		return name;
    	}
    
    	public void setName(String name) {
    		this.name = name;
    	}
    
    	public int getMath() {
    		return math;
    	}
    
    	public void setMath(int math) {
    		this.math = math;
    	}
    
    	public int getEnglish() {
    		return english;
    	}
    
    	public void setEnglish(int english) {
    		this.english = english;
    	}
    	
    	//생성자
    	public Student(String name, int math, int english) {
    		this.name = name;
    		this.math = math;
    		this.english = english;
    	}
    }
    

     

     

     

     

    테스트 데이터 생성 후 출력


    import java.util.ArrayList;
    import java.util.List;
    
    public class DtoListSort {
    
    	public static void main(String[] args) {
    		Student kimSK = new Student("kimSK", 99, 30);
    		Student kimPS = new Student("kimPS", 40, 70);
    		Student kimKD = new Student("kimKD", 84, 40);
    		Student leeFK = new Student("leeFK", 87, 65);
    		Student leeWA = new Student("leeWA", 77, 44);
    		Student leeGI = new Student("leeGI", 95, 70);
    		Student leeIE = new Student("leeIE", 90, 90);
    		Student parkEN = new Student("parkEN", 39, 80);
    		Student parkKN = new Student("parkKN", 99, 73);
    		Student hangKD = new Student("hangKD", 80, 54);
    		Student kisy = new Student("kisy", 55, 70);
    		Student sonHM = new Student("sonHM", 65, 99);
    		Student neyJR = new Student("neyJR", 67, 82);
    		
    		List<Student> list = new ArrayList<Student>();
    		
    		list.add(kimSK);
    		list.add(kimPS);
    		list.add(kimKD);
    		list.add(leeFK);
    		list.add(leeWA);
    		list.add(leeGI);
    		list.add(leeIE);
    		list.add(parkEN);
    		list.add(parkKN);
    		list.add(hangKD);
    		list.add(kisy);
    		list.add(sonHM);
    		list.add(neyJR);
    		
    		for (Student student : list) {
    			System.out.println("Math: " + student.math +", English: "+ student.english + ", name: "+student.name );
    		}
    	}
    
    }
    

    위에서 생성한 Student 클래스의 인스턴스를 마구잡이로 생성해보았습니다. 그리고 출력해 볼까요?

     

    list에 넣은 순서대로 차례로 출력이 잘 되네요. 그렇다면 이제 stream을 사용해서 정렬해 볼게요.

    (이름)문자열 정렬


    list = list.stream().sorted(Comparator.comparing(Student::getName)).collect(Collectors.toList());

    다음과 같이 Comparator 인터페이스를 이용하여 이름순으로 정렬하면 아래처럼 출력이 됩니다.

    abc 알파벳 순서대로 잘 출력이 됩니다.

     

     

    (수학) 정수 정렬


    정수도 마찬가지로 정렬 할 수 있습니다.

    list = list.stream().sorted(Comparator.comparing(Student::getMath)).collect(Collectors.toList());

     

    (영어) 정수 정렬 내림차순으로!


    그렇다면 내림차순으로 정렬은 어떻게 할 수 있을까요? .reversed() 를 사용하면 DTO list를 내림차순으로 정렬 할 수 있습니다.

    list = list.stream().sorted(Comparator.comparing(Student::getMath).reversed()).collect(Collectors.toList());

     

     

     

    도움이 되길!


    자주는 아니지만 정말 가아아~~~~끔 DTO를 정렬해야 할 때가 있었답니다.

    이렇게 stream을 활용하면 코드 한줄로 쉽게 특정 변수에 대해 정렬이 가능합니다.

     

    결론:  stream 짱! 편하다.

     

     

    References


    • 씨 성을 가진 귀인 과장님께 배움

     


    잘못된 코드나 내용이 있다면 댓글을 남겨주세요. 즉시 수정하도록 하겠습니다! :)

    댓글