본문 바로가기
Study

[java] Stream (스트림) 파헤치기

by jisayDeveloper 2023. 10. 11.
728x90
반응형
SMALL

Java 8에서 추가한 스트림(Stream)은 람다를 활용할 수 있는 기술 중 하나입니다. 그 이전에는 배열 또는 컬렉션

인스턴스를 다루는 방법은 for 또는 foreach문을 돌며 요소 하나씩 꺼내는 방법이었습니다.

 

스트림은 배열또는 컬렉션 인스턴스에 함수 여러 개를 조합해서 원하는 결과를 필터링하고 가공된 결과를 얻을 수 있습니다. 즉, 배열과 컬렉션을 함수형으로 처리할 수 있습니다.

 

사용법

1. 스트림 생성

List<String> words = Arrays.asList("apple","banana","cherry","date","elderberry");
Stream<String> wordStream = words.stream();
Stream<Integer> numbersStream = Stream.of(1,2,3,4,5);

2. 중간 연산

 

filter : 특정 조건을 만족하는 요소만 선택합니다.

List<Integer> evenNumbers = numbersStream.filter(n -> n % 2 == 0)
                                                                          .collect(Collectors.toList());

map : 요소를 다른 형태로 변환합니다.

List<String> upperCaseWords = wordStream.map(String::toUpperCase)
                                                                        .collect(Collectors.toList());

distinct : 중복 요소를 제거합니다.

List<Integer> distinctNumbers = numbersStream.distinct()
                                                                              .collect(Collectors.toList());

3. 종단 연산

collect : 스트림 요소를 컬렉션으로 수집합니다.

List<String> filteredWords = wordStream.filter(w -> w.startsWith("b"))
                                                                .collect(Collectors.toList());

foreach : 각 요소에 대한 작업을 수행합니다.

numbersStream.forEach(n -> System.out.print(n + " "));

reduce : 요소를 축소하거나 집계합니다.

int sum = numbersStream.reduce(0, (a, b) -> a + b);

4. 병렬 스트림

List<Integer> bigList = new ArrayList<>();
for (int i = 1; i <= 1000; i++) {
bigList.add(i);
}
int sum = bigList.parallelStream() .filter(n -> n % 2 == 0)
                                                      .map(n -> n * 2)
                                                      .reduce(0, (a, b) -> a + b);
System.out.println("짝수의 합 (병렬): " + sum);

위의 코드에서는 큰 리스트에서 병렬 스트림을 사용하여 짝수를 필터링하고 두 배로 변환한 다음 모두 더합니다. 이렇게 병렬 스트림을 사용하면 멀티코어 프로세서를 활용하여 성능을 향상시킬 수 있습니다.

스트림은 데이터 처리를 간결하게 하고 병렬화를 쉽게 구현할 수 있는 강력한 도구입니다. Java 8의 Stream API를 활용하면 코드를 더 간결하게 작성하고 동시에 성능을 향상시킬 수 있습니다.

728x90
반응형
LIST