본문 바로가기

TIL

2022.11.21 JAVA 스트림

스트림

스트림이란

  • 람다를 활용할 수 있는 기술 중 하나로 데이터의 흐름을 의미함
  • 컬렉션의 저장 요소를 하나씩 참조해서 람다식으로 처리할 수 있도록 해주는 반복자
  • 스트림을 활용해서 필터링,데이터 변경, 다른 타입이나 자료구조로 변환 등을 할 수 있음

특징

  • 스트림은 데이터 소스를 변경하지 않음
  • 스트림은 작업을 내부적으로 반복 처리
  • 스트림은 컬렉션의 요소를 모두 읽고 나면 닫혀서 재사용이 불가능합니다. 그러므로 필요할 경우 재생성

생성

Stream<T> Collection.stream() 을 이용하여 해당하는 컬렉션을 기반으로하는 스트림을 생성

 

중간 연산

- 데이터의 형변환 혹은 필터링, 정렬 등 스트림에 대한 가공을 해줍니다.

- map(변환) / sorted(정렬) / skip(스트림 자르기) / limit(스트림 자르기) 등이 있습니다.

 

최종 연산

- 스트림의 요소를 소모해서 결과를 반환. 최종 연산 이후에는 스트림이 닫히게 되고 더 이상 사용할 수 없습니다.

- 최종 연산의 결과값은 단일 값일 수도 있으며 배열 혹은 컬렉션일 수도 있습니다.

- collect()를 이용해서 다른 콜렉션으로 바꾸는 것, reduce를 이용해서 incremental calculation하는 것도 가장 많이 쓰이는 패턴입니다.

 

예제 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
 
public class Main {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("서울");
        list.add("부산");
        list.add("속초");
        list.add("서울");
 
        System.out.println(list);
        List<String> result = list.stream() // 스트림 생성
                                  .limit(2//중간 연산
                                  .collect(Collectors.toList()); // 최종 연산
        System.out.println(result);
 
        System.out.println("list -> transformation -> set");
        Set<String> set = list.stream()
                              .filter("서울"::equals)
                              .collect(Collectors.toSet());
        set.forEach(System.out::println);
    }
}
cs

생소한 개념인 람다를 활용하기위해 또 생소한 개념인 스트림을 배웠다.

'TIL' 카테고리의 다른 글

[WIL] 2022.11.21 ~ 11.25 미니 프로젝트 주간  (0) 2022.11.27
2022.11.22 객체지향 3-Tier Architecture  (0) 2022.11.22
[WIL] 2022.11.14~11.18  (1) 2022.11.20
2022.11.18 제네릭스, 람다  (0) 2022.11.20
2022.11.17 JAVA 객체지향  (0) 2022.11.17