자바의 Stream
2024. 2. 29. 02:57ㆍJava
반응형
Stream 이란 무엇인가
Stream 은 Java 8 에서 추가된 API로, 객체를 순회하여 처리하는 다양한 로직을 제공한다.
Stream 의 사용처
- 객체의 가공
- 필터링, 매핑, 정렬 등
Stream 의 특징
- Stream 은 데이터 구조가 아니라 데이터 구조를 입력으로 하는 API 이다.
- Stream 은 원본 데이터 구조를 변화시키지 않고, 메서드들을 통해 결과를 반환받는다.
- 각 중간 메서드들은 lazy 하게 동작하므로 연쇄적으로 메서드를 체이닝할 수 있다.
Stream 의 동작
Stream 의 동작 과정은 중간(Intermediate) 과정과 종결(Terminate) 과정이 있다.
중간 과정 (Intermediate Operation)
중간 과정은 여러 개의 메서드들이 체이닝되며 객체를 가공하는 과정이다.
주요 중간 과정 메서드
map() : 객체 내 데이터에 동일한 처리를 한다.
List<Integer> integerList = List.of(1,2,3,4,5); // map() List<Integer> streamIntList = integerList.stream().map(x -> x*x).toList();
filter() : 특정 조건을 만족하는 요소만 선택한다.
List<String> stringList = List.of("Reflection", "Collection", "Stream"); // filter() List<String> streamStringList = stringList.stream().filter(s -> s.startsWith("S")).toList();
sorted() : 데이터를 정렬한다.
List<String> stringList = List.of("Reflection", "Collection", "Stream"); // sorted() List<String> sortedStringList = stringList.stream().sorted().toList();
종결 과정 (Terminal Operation)
종결 과정은 stream 을 거친 객체가 결과를 반환하는 과정이다.
주요 종결 과정 메서드
collect() : stream 의 결과값을 반환한다.
List<Integer> integerList2 = List.of(2,4,2,5,4); // collect() Set<Integer> streamIntSet = integerList2.stream().collect(Collectors.toSet());
forEach() : stream 의 결과값을 순회한다.
List<Integer> integerList = List.of(1,2,3,4,5); // forEach() integerList.stream().forEach(s -> System.out.println(s)); // 1 2 3 4 5
reduce() : stream 의 결과값을 하나의 값으로 반환한다.
List<Integer> integerList = List.of(1,2,3,4,5); int odd = integerList.stream().filter(x -> x%2 != 0).reduce(0, (ans, i) -> ans + 1); // 3
References
반응형
'Java' 카테고리의 다른 글
자바의 Garbage Collection (0) | 2024.03.02 |
---|---|
자바의 JVM (0) | 2024.03.01 |
자바의 제네릭 (Generic) (1) | 2024.02.28 |
자바의 네트워킹과 소켓 통신 (1) | 2024.02.27 |
자바의 직렬화 (Serialization) (0) | 2024.02.22 |