정렬
스트림은 요소가 최종 처리되기 전에 중간 단계에서 요소를 정렬해서 최종 처리 순서를 변경할 수 있다. 요소를 정렬하는 메소드는 다음과 같다.
리턴 타입 | 메소드(매개 변수) | 설명 |
---|---|---|
Stream<T> | sorted() | 객체를 Xomparable 구현 방법에 따라 정렬 |
Stream<T> | sorted(Comparator<T>) | 객체를 주어진 Comparator에 따라 정렬 |
DoubleStream | sorted() | double 요소를 오름차순으로 정렬 |
IntStream() | sorted() | int 요소를 오름차순으로 정렬 |
LongStream | sorted() | long 요소를 오름차순으로 정렬 |
객체 요소일 경우에는 클래스가 Comparable을 구현하지 않으면 sorted() 메소드를 호출했을 때 ClassCastException이 발생하기 때문에 Comparable을 구현한 요소에서만 sorted() 메소드를 호출해야 한다.
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 comparaTo(Student o){
return Integer.compare(score, o.getScore);
}
}
// 오름차순
sorted();
sorted( (a,b) -> a.compareTo(b) );
sorted( Comparator.naturalOrder() ); // 객체에서 compareTo 함수를 구현하지 않았을 경우
// 내림차순
sorted( (a,b) -> b.compareTo(a) );
sorted( Comparator.reverseOrder() );
Arrays 의 숫자를 아래와 같이 정렬할 수 있다.
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.stream.IntStream;
public class SortingExample {
public static void main(String[] args){
//숫자 요소일 경우
IntStream intStream = Arrays.stream(new int[] {5, 3, 2, 1, 4});
intStream
.sorted()
.forEach(n -> System.out.print(n + ","))l
System.out.println();
}
}