-
[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
- 강씨 성을 가진 귀인 과장님께 배움
잘못된 코드나 내용이 있다면 댓글을 남겨주세요. 즉시 수정하도록 하겠습니다! :)
'JAVA' 카테고리의 다른 글
[JAVA] 자바 가비지 컬렉션 , Java Garbage Collection #GC (0) 2021.07.06 [JAVA] LinkedList를 접근 제어하는 ListIterator (0) 2021.01.24 [JAVA] Number 클래스와 Value 메서드 (0) 2020.07.13 [JAVA] SMTP 메일 이미지 첨부 방법 3가지 (0) 2020.07.04 [JAVA] 인터페이스 (interface) (0) 2020.07.04