티스토리 뷰
스트림?
- 데이터 소스를 추상화하고, 데이터를 다루는데 자주 사용되는 메서드들을 정의해 놓은 것
- 데이터 소스가 무엇이던 간에 같은 방식으로 다를 수 있게 해줌
- 코드의 재사용성이 높아짐
문자열 정렬, 출력
String[] strings = {"data1", "data3", "data2"};
List<String> stringList = Arrays.asList(strings);
Arrays.sort(strings);
Collections.sort(stringList);
for(String string : strings) {
System.out.println(string);
}
for(String string : stringList) {
System.out.println(string);
}
Stream<String> stringStream = stringList.stream();
Stream<String> stringStream2 = Arrays.stream(strings);
stringStream.sorted().forEach(System.out::println);
stringStream2.sorted().forEach(System.out::println);
스트림 특징
- 데이터 소스를 변경하지 않음
- 일회용
- 내부 반복으로 처리
스트림 연산
- 중간 연산 : 연산 결과(반환값)이 스트림인 연산
- 최종 연산 : 스트림의 요소를 소모하는 연산
stringStream.sorted().forEach(System.out::println);
에서 sorted()는 중간 연산, forEach는 최종 연산에 해당
- 중간 연산 종류
distinct() - 중복을 제거
filter() - 조건에 안 맞는 요소 제외
limit() - 스트림의 일부를 잘라냄
skip() - 스트림의 일부를 건너뜀
peek() - 스트림의 요소에 작업수행 (스트림의 중간 값을 확인하기에 좋음)
sorted() - 스트림의 요소를 정렬
map, flatMap - 스트림의 요소를 변환
- 최종 연산 종류
forEach(), forEachOrdered() - 각 요소에 지정된 작업 수행
count() - 스트림의 요소의 갯수 반환
max(), min() - 스트림의 최대, 최소 값을 반환
findAny(), findFirst() - 스트림의 요소 하나를 반환(any : 아무거나 1개, first : 첫 번째 요소)
allMatch(), anyMatch(), noneMatch() - 주어진 조건을 모든 요소가 만족시키는지, 만족시키지 않는지 확인
toArray() - 스트림의 모든 요소를 배열로 반환
reduce() - 스트림의 요소를 하나씩 줄여가면서 계산
collect() - 스트림 요소를 수집, 결과를 컬렉션에 담아 반환하는데 사용
- 스트림 연산은 최종 연산이 수행되기 전까지는 중간 연산을 수행하지 않는다(지연된 연산)
- 중간 연산을 호출 해도 어떤 작업이 수행되어야 하는지를 지정할 뿐 연산을 수행하진 않는다.
'개발 > Java' 카테고리의 다른 글
Effective Java 3/E - 싱글턴을 만드는 방법 (0) | 2021.01.16 |
---|---|
Effective Java 3/E - 정적 팩터리 메서드 (0) | 2021.01.14 |
자바 스트림 -2 (0) | 2021.01.01 |
자바 람다식 (0) | 2020.12.19 |
자바 객체를 생성하는 3가지 방법 (0) | 2020.11.27 |