스트림(Stream)
배열, 컬렉션 저장 요소를 하나씩 참조해서 람다식으로 처리할 수 있게 해주는 반복자
스트림을 사용하게되면 List, Set, Map, 배열 등 다양한 데이터 소스로부터 스트림을 만들 수 있고
표준화된 방법으로 다룰 수 있게된다
데이터 소스를 다루는 다양한 메소드를 제공하기 때문에 잘만 활용한다면
많은 데이터에 복잡한 연산을 수행하면서도 가독성과 재사용성이 높은 코드를 작성할 수 있다
선언형으로 데이터 소스를 처리하는데
무슨 말이냐면,
선언형 프로그래밍 : 어떻게 수행하는지 보다는 무엇을 수행하는지 관심을 두는 패러다임
이라고 할 수 있다
명령형 방식에서는 절차대로 따라가야 코드를 이해할 수 있는 반면
선언형 방식에서는 코드를 작성하면 내부 동작 원리를 모르더라도 코드가 무슨 일을 하는지 이해가 가능하다
그러니까 "어떻게" 라는 부분이 추상화 되어 있다는 말이다
스트림 구조, 사용법
파이프라인
스트림 생성
데이터의 필터링, 매핑, 정렬 등의 중간 연산
최종적으로 정제된 데이터를 평균, 합계, 최대 최소 값 구하는 등의 최종 연산을 파이프라인 구조로 나타낸다
보편적으로 배열이나 컬렉션을 사용해서 스트림을 생성한다
스트림의 종류는 매우 다양하므로 상황을 보면서 적절하게 사용할 줄 알아야 한다
실제로 사용해야 할 때 여러 스트림을 마주하게 된다면 그 순간마다 블로깅을 할 예정이다
package StreamCollection;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;
public class StreamExample {
public static void main(String[] args) {
List<String> list1 = Arrays.asList("Monday", "화요일", "수요일", "목요일");
List<String> list2 = Arrays.asList("금요일", "토요일", "Sunday", "Monday");
Stream<String> stream1 = list1.stream();
Stream<String> stream2 = list2.stream();
Stream<String> stream3 = Stream.concat(stream1, stream2);
// stream1, 2 합치기
stream3.distinct()
.filter(n -> n.startsWith("M"))
.forEach(n -> System.out.println(n));
// distinct()는 중복제거, filter()는 매개 값으로 조건이 주어지고 그게 참이 되는 요소만 필터링
// forEach() 최종 연산 메소드, 파이프라인 마지막에 사용, 값 출력, 리턴 값 없어도 쓰임
}
}
list1, list2 를 컬렉션 리스트로 생성, 요일을 그냥 집어넣었고
각각 Stream으로 생성한다
Stream<String> stream1 = list1.stream();
Stream<String> stream2 = list2.stream();
concat 을 사용해서 두 스트림을 합쳐주고
Stream<String> stream3 = Stream.concat(stream1, stream2);
중간 연산으로 distinct() 중복제거 (Monday가 중복)
filter()로 M으로 시작하는 요소를 필터링 (Monday 필터링)
최종 연산으로 forEach() 값을 출력해주었다 (Monday가 출력된다)
아주 간단하면서도 기초적인 스트림 예제라고 할 수 있다
이거말고도 훨씬 많은 사용방법이 존재하는데
중간에 말했 듯, 실제로 사용하는 순간을 마주 할 때
가져와서 자세하게 블로깅 할 것이다
'Java' 카테고리의 다른 글
[Java 심화] 람다(Lambda) (0) | 2022.06.06 |
---|---|
[Java 심화] 애너테이션(Annotation) (소스코드 미수록) (0) | 2022.06.01 |
[Java 심화] Enum (0) | 2022.06.01 |
[Java 컬렉션] 내부 클래스 (Inner Class) (0) | 2022.06.01 |
[Java 컬렉션] 컬렉션 프레임워크(Collection Framework) (0) | 2022.06.01 |
댓글