[Java] 스트림(stream) - 최종 연산

max9106·2021년 1월 22일
0

[Java]자바 기초

목록 보기
23/35

만들어진 스트림의 요소를 소모하여 결과를 만들어내는 연산. 최종 연산 후에는 스트림이 닫히게된다. 값은 단일 값, 배열, 컬렉션이 될 수 있다.

스트림 요소 출력

  • forEach(): 주로 스트림의 요소를 출력하는데 많이 쓰인다.
.forEach(System.out::println);

조건 검사

  • allMatch(): 지정된 조건에 모든 요소가 일치하는지 확인
  • anyMatch(): 지정된 조건에 일부 요소가 일치하는지 확인
  • noneMatch(): 지정된 조건에 어떤 요소도 일치하지 않는지 확인
  • findFirst(): 지정된 조건에 일치하는 첫 번째 것을 반환
  • findAny(): (병렬 스트림인 경우)지정된 조건에 일치하는 것 반환

통계

  • count(): 요소의 갯수
  • max(): 최댓값. 매개변수로 Comparator를 줘야한다.
  • min(): 최솟값. 매개변수로 Comparator를 줘야한다.

대부분 기본형 스트림으로 변환하거나, reduce(), collect()를 사용해 통계 정보를 얻는다.

reduce

스트림의 요소를 줄여나가면서 연산을 수행하고 최종 결과를 반환. 처음 두 요소를 가지고 연산한 결과를 사용해 다음 요소와 연산한다. 초기값을 주는 경우는 초기값과 스트림의 첫 번째 요소로 연산을 시작하고, 연산한 결과를 사용해 다음 요소와 연산한다.

collect

스트림의 요소를 수집하는 연산. 매개변수로 Collector(컬렉터)를 사용해 스트림의 요소를 수집한다. 컬렉터는 어떻게 수집할 것인가에 대한 방법이다.

Collectors 클래스의 static 메서드

Collectors.메서드이름() 으로 사용

스트림을 컬렉션과 배열로 변환

스트림의 모든 요소를 컬렉션이나 배열로 변환한다.

  • toList(): 스트림의 모든 요소를 List로 변환
  • toSet(): 스트림의 모든 요소를 Set으로 변환
  • toCollection(): 스트림의 모든 요소를 특정 컬렉션으로 변환
    Collectors.toCollection(ArrayList::new)
  • toMap(): 스트림의 모든 요소를 Map으로 변환. 객체의 어떤 필드를 키로 사용할지와 어떤 필드를 값으로 사용할지 지정해줘야한다.
  • toArray(): 스트림의 모든 요소를 T타입의 배열로 변환. T타입의 생성자 참조를 매개변수로 지정해줘야한다. 매개변수를 주지 않으면 Object 배열로 반환된다.

문자열 결합

문자열 스트림의 모든 요소를 하나의 문자열로 연결한다. 구분자를 줄 수도 있고, 접두사나 접미사도 지정할 수 있다. 스트림 요소가 문자열이 아닌경우 map을 사용하여 문자열로 만든 후 사용할 수 있다.

  • joining()

그룹화

스트림의 요소를 특정 기준으로 그룹화하는 것. 결과는 Map에 담겨 반환됨.

  • groupingBy()
Map<Integer, List<Student>> studentByClass = studentStream.collect(Collectors.grounpingBy(Student::getClass));

분할

스트림의 요소를 특정 조건에 일치하는 그룹과 일치하지 않는 2가지의 그룹으로 분할한다. 결과는 Map에 담겨 반환됨.

  • partitioningBy()
Map<Boolean, List<Student>> studentBySex = studentStream.collect(Collectors.partitioningBy(Student::isMale));
List<Student> male = studentBySex.get(true);
List<Student> female = studentBySex.get(false);
profile
@woowacourse 3rd BE

0개의 댓글