https://product.kyobobook.co.kr/detail/S000061695652
요소 정렬
요소들을 stream을 이용해 오름차순 또는 내림차순으로 정렬하는 중간 처리 기능입니다.
Stream, Double, Int, Long에 따라 sorted()를 쓸 수 있으며, sorted(Comparator<T>)를 통해 Comparator를 지정 해 줄 수 있습니다.
- 스트림의 요소가 객체일 경우 객체가 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;
}
@Override
public int compareTo(Student o) {
return Integer.compare(score, o.score);
}
}
List<Student> studentList = new ArrayList<>();
studentList.stream()
.sorted();
studentList.stream()
.sorted(Comparator.reverseOrder());
만약 Comparable을 implements 하고 있지 않는다면???
studentList.stream()
.sorted((s1, s2) -> Integer.compare(s1.getScore(), s2.getScore())); // score를 기준으로 오름차순
studentList.stream()
.sorted((s1, s2) -> Integer.compare(s2.getScore(), s1.getScore())); // score를 기준으로 내림차순
요소를 하나씩 처리(루핑)
루핑은 스트림에서 요소를 하나씩 반복해서 가져와 처리하는 것을 말합니다. 루핑 메소드에는 peek ()와 forEach()가 있습니다.
리턴 타입 | 메소드(매개변수) | 설명 |
Stream<T> IntStream DoubleStream |
peek(Consumer<? super T>) | T 반복 |
peek(IntConsumer action) | int 반복 | |
peek(DoubleConsumer action) | double 반 | |
void | forEach(Consumer<? super T> action) | T 반복 |
forEach(IntConsumer action) | int 반복 | |
forEach(DoubleConsumer action) | double 반복 |
- peek()는 중간 처리 메소드이고 forEach()는 최종 처리 메소드입니다.
요소 조건 만족 여부(매칭)
리턴 타입 | 메소드(매개변수) | 조사 내용 |
boolean | allMatch(Predicate<T> predicate) | 모든 요소가 만족하는지 여부 |
boolean | anyMatch(Predicate<T> predicate) | 최소한 하나의 요소가 만족하는지 여부 |
boolean | noneMatch(Predicate<T> predicate) | 모든 요소가 만족하지 않는지 여부 |
요소 기본 집계
스트림이 제공하는 기본 집계
리턴 타입 | 메소드(매개변수) | 설명 |
long | count() | 요소 개수 |
OptionalXXX | findFirst() | 첫 번째 요 |
Optional<T> OptionalXXX |
max(Comparator<T>) max() |
최대 요소 |
Optional<T> OptionalXXX |
min(Comparator<T>) min() |
최소 요소 |
OptionalDouble | average() | 요소 평균 |
int, long, double | sum() | 요소 총합 |
Optional 클래스
리턴 타입 | 메소드(매개변수) | 설명 |
boolean | isPresent() | 집계값이 있는지 여부 |
T double int long |
orElse(T) orElse(double) orElse(int) orElse(long) |
집계값이 없을 경우 디폴트 값 설정 |
void | ifPresent(Consumer) ifPresent(DoubleConsumer) ifPresent(IntConsumer) ifPresent(LongConsumer) |
집계값이 있을 경우 Consumer에서 처리 |