심심한잉여의 잡동사니

[JAVA] 스트림(Stream) 정리 본문

코딩일기/Java

[JAVA] 스트림(Stream) 정리

심심한잉여 2022. 9. 20. 18:30
반응형

스트림이란
자바 8버전에서부터 추가 된 람다를 활용한 기술

자바8 이전에는 배열 또는 컬렉션을 다루는 방법으로 for, foreach를 사용하며 요소 하나씩다루는 방법을 사용했다.
간단한 경우라면 크게 상관 없지만 로직이 복잡해질수록 코드의 양이 많아져 여러 로직이 섞이게 되고, 메소드를 나눌 경우 루프를 여러번 도는 경우가 발생한다.

스트림은 '흐름'이라는 뜻으로 데이터의 흐름을 뜻한다. 배열 또는 컬렉션 인스턴스에 함수 여러개를 조합해서 원하는 결과를 필터링 하고 가공된 결과를 얻을 수 있다. 또한 람다를 이용해서 코드의 양을 줄이고 간결하게 표현할 수 있다.
즉, 배열과 컬렉션을 함수형으로 처리할 수 있다는 것이 특징이다.

병렬처리(멀티 쓰레딩)이 가능하다는 장점이 있다.
하나의 작업을 둘 이상의 작업으로 잘게 나눠서 동시에 진행하는 것을 병렬 처리라 하는데 즉 쓰레드를 이용하여 많은 요소를 처리할 수 있다는 뜻이다.

스트림의 사용방법은

스트림 인스턴스 생성 -> 필터링, 맵핑 등 원하는 결과로 가공 -> 결과로 리턴받기

해당 과정을 통해 스트림을 사용할 수 있다.

예제로 보면

String[] arr = new String[]{"a","b","c"};
Stream<String> stream = Arrays.stream(arr);
Stream<String> stramOfArrayPart = Arrays.stream(arr,1,3);



// 컬렉션들은 기본적으로 stream라는 디폴트 메소드가 내장되어 있어 사용하면 됨
List<String> list = Arrays.asList(arr);
Stream<String> stream2 = list.stream(); 
Stream<String> stream2 = list.parallelStream(); // 병렬 처리 스트림

위 코드와 같이 스트림(Stream)을 선언할 수 있다.

filter()(필터)

stream.filter(str -> str.contains("a")); // ["a"]

map()(요소 가공)

stream.map(String::toUpperCase); // [A,B,C]

 

반응형