카테고리 없음

스트림이란? (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에서 처리