반응형
요소가 최종 처리되기 전에 중간 단계에서 요소를 정렬해서 최종 처리 순서를 변경할 수 있다.sorted()
=> 객체의 Comparable 구현 방법에 따라 정렬sorted(Comparator<T>)
=> 객체를 주어진 Comparator에 따라 정렬
정렬과 관련해서 기존에 사용하고 있던 Worker 클래스를 변형하였다.
Comparable 인터페이스를 구현하여, 나이(age)기준으로 오름차순으로 정렬할 수 있게 변경하였다.
public class Worker implements Comparable<Worker>{
private String name;
private int age;
public Worker(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
@Override
public int compareTo(Worker o) { // 나이를 기준으로 오름차순
return Integer.compare(this.age, o.getAge());
}
}
만약 객체를 기본 비교(Comparable) 방법으로 정렬하고 싶다면 아래와 같이 사용할 수 있다.
sorted();
sorted((a,b) -> a.compareTo(b));
sorted(Comparator.naturalOrder());
기본 비교(Comparable) 역순으로 정렬하고 싶다면 아래와 같이 사용
sorted((a,b) -> b.compareTo(a));
sorted(Comparator.reverseOrder());
만약, 객체가 Comparable이 구현되어 있지않으면, Comparator를 매개값으로 갖는 sorted() 메소드를 사용하면 된다.
sorted((a,b) -> { ... 구현 });
public static void main(String[] args){
IntStream intStream = Arrays.stream(new int[] {5, 3, 1, 2, 4});
intStream
.sorted() // 오름차순으로 정렬 기본 Comparable을 따른다.
.forEach(s -> System.out.print(s + ","));
System.out.println();
List<Worker> workerList = Arrays.asList(
new Worker("강성현", 30),
new Worker("깡냉", 20),
new Worker("까랭", 10));
workerList.stream()
.sorted() // comparable 구현된 로직으로 정렬된다.
.forEach(s -> System.out.print(s.getAge() + ","));
System.out.println();
// 새로운 정렬 기준으로 정렬하려면 comparator를 사용해야 한다.
workerList.stream()
.sorted((a, b) -> {
return b.compareTo(a); // 그냥 역순으로 해보았다..
})
.forEach(s -> System.out.print(s.getAge() + ","));
}
1,2,3,4,5,
10,20,30,
30,20,10,
반응형
'프로그래밍 노트 > JAVA' 카테고리의 다른 글
[JAVA] Stream 기본집계 (0) | 2019.06.30 |
---|---|
[JAVA] Stream Looping(루핑, peek(), forEach()) (0) | 2019.06.17 |
[JAVA] Stream 매핑(flatMapXXX(), mapXXX(), asXXXStream(), boxed()) (0) | 2019.06.17 |
[JAVA] Stream의 필터링(distinct(), filter()) (0) | 2019.06.17 |
[JAVA] Stream pipeline(스트림 파이프라인) (0) | 2019.06.17 |