본문 바로가기
Java

[Java 심화] 스트림(Stream) (매-우 기초적인 부분만)

by jphwany 2022. 6. 6.

스트림(Stream)

배열, 컬렉션 저장 요소를 하나씩 참조해서 람다식으로 처리할 수 있게 해주는 반복자

스트림을 사용하게되면 List, Set, Map, 배열 등 다양한 데이터 소스로부터 스트림을 만들 수 있고
표준화된 방법으로 다룰 수 있게된다

데이터 소스를 다루는 다양한 메소드를 제공하기 때문에 잘만 활용한다면
많은 데이터에 복잡한 연산을 수행하면서도 가독성과 재사용성이 높은 코드를 작성할 수 있다


선언형으로 데이터 소스를 처리하는데 
무슨 말이냐면,

선언형 프로그래밍 : 어떻게 수행하는지 보다는 무엇을 수행하는지 관심을 두는 패러다임
이라고 할 수 있다

명령형 방식에서는 절차대로 따라가야 코드를 이해할 수 있는 반면
선언형 방식에서는 코드를 작성하면 내부 동작 원리를 모르더라도 코드가 무슨 일을 하는지 이해가 가능하다

그러니까 "어떻게"  라는 부분이 추상화 되어 있다는 말이다


스트림 구조, 사용법


파이프라인

스트림 생성
데이터의 필터링, 매핑, 정렬 등의 중간 연산
최종적으로 정제된 데이터를 평균, 합계, 최대 최소 값 구하는 등의 최종 연산파이프라인 구조로 나타낸다

출처 : https://www.ifourtechnolab.com/blog/a-guide-on-java-stream-api

보편적으로 배열이나 컬렉션을 사용해서 스트림을 생성한다
스트림의 종류는 매우 다양하므로 상황을 보면서 적절하게 사용할 줄 알아야 한다
실제로 사용해야 할 때 여러 스트림을 마주하게 된다면 그 순간마다 블로깅을 할 예정이다


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가 출력된다)


아주 간단하면서도 기초적인 스트림 예제라고 할 수 있다

이거말고도 훨씬 많은 사용방법이 존재하는데 

중간에 말했 듯, 실제로 사용하는 순간을 마주 할 때 
가져와서 자세하게 블로깅 할 것이다


댓글