카테고리 없음
스트림이란? (2)
인프라 감자
2023. 7. 28. 15:44
https://product.kyobobook.co.kr/detail/S000061695652
이것이 자바다 | 신용권 - 교보문고
이것이 자바다 | JAVA 17 버전으로 업그레이드해서 돌아왔다! 7년 동안 꾸준히 사랑받은 자바 베스트셀러 1위, 『이것이 자바다』 개정판!『이것이 자바다』는 기본 개념에 충실한 설명으로 2015년
product.kyobobook.co.kr
요소 정렬
요소들을 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에서 처리 |