728x90
정렬
요소를 오름차순 or 내림차순으로 정렬하는 중간 처리기능입니다.

Comparable과 Comparator는 둘다 인터페이스 정렬에 사용합니다.
객체를 비교할수 있습니다.
(Comparable = 유사한)
Comparable : compareTo 메서드 구현
자기자신과 매개변수 객체를 비교합니다
compareTo(T o)
---------------------------------------------------------------------------
(comparator : 비교하기)
Comparator : compare 메서드 구현
두 매개변수 객체를 비교합니다
compare(T o1, T o2)
Comparable 구현 객체의 정렬
스트림의 요소가 객체일 경우 객체가 Comparable을 구현하고 있어야만 sorted() 메소드를 사용하여 정렬이 가능 합니다. 그렇지 않다면 ClassCastException이 발생합니다.

Student.java
public class Student implements Comparable<Student>{
private String name;
private int score;
public Student(String name, int score) {
this.name = name;
this.score = score;
}
public String getName() {return name;}
public int getScore() {return score;}
@Override
public int CompareTo(Student o) {
return Integer.compare(score, o.score);
//score와 o.score가 같을경우 0을 리턴,
//작을겨우 음수리턴, 클 경우 양수리턴
}
}
SortingExam.java
import java.util.List;
import java.util.ArrayList;
import java.util.Comparator;
public class SortingExam {
public static void main(String[] args) {
//List 컬렉션 생성
List<Student> studentList = new ArrayList<>();
studentList.add(new Student("홍길동", 30));
studentList.add(new Student("신용권", 10));
studentList.add(new Student("유미선", 20));
studentList.stream()
.sorted()
.forEach(s -> System.out.println(s.getName() + ": " + s.getScore()));
System.out.println();
//점수를 기준으로 내림차순으로 정렬한 새 스트림 얻기
studentList.stream().sorted(Comparator.reverseOrder())
.forEach(s -> System.out.println(s.getName() + ": " + s.getScore()));
}
}
결과:
신용권: 10
유미선: 20
홍길동: 30
홍길동: 30
유미선: 20
신용권: 10
Comparator를 이용한 정렬
- 요소 객체가 Comparable을 구현하고 있지 않다면, 비교자를 제공하면 요소를 정렬시킬수 있습니다.
sorted((o1, o2) -> {...})
- 괄호안에는 o1이 o2보다 작으면 음수, 같으면 0, 크면 양수를 리턴하도록 작성합니다.
- o1과 o2가 정수일 경우에는 Integer.compare(o1, o2)를, 실수일 경우에는 Double.compare(o1, o2)를 호출해서 리턴값을 리턴할수 있습니다.
Student.java
public class Student{
private String name;
private int score;
public Student(String name, int score) {
this.name = name;
this.score = score;
}
public String getName() {return name;}
public int getScore() {return score;}
}
SortingExam.java
import java.util.List;
import java.util.ArrayList;
public class SortingExam {
public static void main(String[] args) {
//List 컬렉션 생성
List<Student> studentList = new ArrayList<>();
studentList.add(new Student("홍길동", 30));
studentList.add(new Student("신용권", 10));
studentList.add(new Student("유미선", 20));
//점수를 기준으로 오름차순 정렬한 새 스트림 얻기
studentList.stream()
.sorted((s1, s2) -> Integer.compare(s1.getScore(), s2.getScore()))
.forEach(s-> System.out.println(s.getName() + ": " + s.getScore()));
System.out.println();
//점수를 기준으로 내림차순 정렬한 새 스트림 얻기
studentList.stream()
.sorted((s1, s2) -> Integer.compare(s2.getScore(), s1.getScore()))
.forEach(s-> System.out.println(s.getName() + ": " + s.getScore()));
System.out.println();
}
}
결과:
신용권: 10
유미선: 20
홍길동: 30
홍길동: 30
유미선: 20
신용권: 10
728x90
'JAVA > Java 기초' 카테고리의 다른 글
| Optional 클래스.java (0) | 2023.01.30 |
|---|---|
| 루핑, 매칭, 집계.java (0) | 2023.01.30 |
| 람다식.java (0) | 2023.01.27 |
| 컬렉션 자료구조3.java (0) | 2023.01.26 |
| 컬렉션자료구조2.java (0) | 2023.01.26 |