중간 연산은 스트림 파이프라인에서 데이터를 변환하고 필터링하는 작업을 수행합니다.
중간 연산은 지연 연산(lazy evaluation)으로, 최종 연산이 호출될 때까지 실제로 수행되지 않습니다. 중간 연산은 항상 새로운 스트림을 반환합니다.
1. filter
• 설명: 주어진 조건에 맞는 요소만을 포함하는 스트림을 반환합니다.
• 예시:
List<String> items = Arrays.asList("Apple", "Banana", "Orange");
Stream<String> filteredStream = items.stream().filter(item -> item.startsWith("A"));
2. map
• 설명: 각 요소를 주어진 함수에 의해 변환된 결과로 매핑하여 새로운 스트림을 반환합니다.
• 예시:
List<String> items = Arrays.asList("Apple", "Banana", "Orange");
Stream<String> mappedStream = items.stream().map(String::toUpperCase);
3. flatMap
• 설명: 각 요소를 스트림으로 변환한 후, 하나의 스트림으로 평탄화하여 반환합니다.
• 예시:
List<List<String>> listOfLists = Arrays.asList(
Arrays.asList("a", "b", "c"),
Arrays.asList("d", "e", "f")
);
Stream<String> flatMappedStream = listOfLists.stream().flatMap(List::stream);
4. distinct
• 설명: 스트림의 중복 요소를 제거합니다.
• 예시:
List<Integer> numbers = Arrays.asList(1, 2, 2, 3, 4, 4, 5);
Stream<Integer> distinctStream = numbers.stream().distinct();
5. sorted
• 설명: 스트림의 요소를 정렬합니다.
• 예시:
List<String> items = Arrays.asList("Banana", "Apple", "Orange");
Stream<String> sortedStream = items.stream().sorted();
6. peek
• 설명: 각 요소를 소비하는 동안 추가 작업을 수행합니다. 주로 디버깅 목적으로 사용됩니다.
• 예시:
List<String> items = Arrays.asList("Apple", "Banana", "Orange");
Stream<String> peekedStream = items.stream().peek(System.out::println);
7. limit
• 설명: 스트림의 요소를 지정된 수만큼 제한합니다.
• 예시:
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
Stream<Integer> limitedStream = numbers.stream().limit(3);
8. skip
• 설명: 스트림의 처음 N개의 요소를 건너뜁니다.
• 예시:
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
Stream<Integer> skippedStream = numbers.stream().skip(2);
최종 연산 (Terminal Operations)
최종 연산은 스트림 파이프라인을 실행하고 결과를 생성합니다. 최종 연산은 스트림을 소비하며, 더 이상 다른 스트림 연산을 수행할 수 없습니다.
1. forEach
• 설명: 각 요소를 소비하여 주어진 작업을 수행합니다.
• 예시:
List<String> items = Arrays.asList("Apple", "Banana", "Orange");
items.stream().forEach(System.out::println);
2. collect
• 설명: 스트림의 요소를 컬렉션이나 다른 유형의 결과로 수집합니다.
• 예시:
List<String> items = Arrays.asList("Apple", "Banana", "Orange");
List<String> collectedList = items.stream().collect(Collectors.toList());
3. reduce
• 설명: 스트림의 요소를 결합하여 하나의 값으로 줄입니다.
• 예시:
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = numbers.stream().reduce(0, Integer::sum);
4. count
• 설명: 스트림의 요소 개수를 반환합니다.
• 예시:
List<String> items = Arrays.asList("Apple", "Banana", "Orange");
long count = items.stream().count();
5. anyMatch, allMatch, noneMatch
• 설명: 스트림의 요소가 주어진 조건에 대해 하나라도/모두/하나도 만족하지 않는지 확인합니다.
• 예시:
List<String> items = Arrays.asList("Apple", "Banana", "Orange");
boolean anyMatch = items.stream().anyMatch(item -> item.startsWith("A"));
boolean allMatch = items.stream().allMatch(item -> item.length() > 3);
boolean noneMatch = items.stream().noneMatch(item -> item.startsWith("Z"));
6. findFirst, findAny
• 설명: 스트림의 첫 번째 요소를 찾거나, 임의의 요소를 찾습니다.
• 예시:
List<String> items = Arrays.asList("Apple", "Banana", "Orange");
Optional<String> firstItem = items.stream().findFirst();
Optional<String> anyItem = items.stream().findAny();
7. toArray
• 설명: 스트림의 요소를 배열로 반환합니다.
• 예시:
List<String> items = Arrays.asList("Apple", "Banana", "Orange");
String[] itemArray = items.stream().toArray(String[]::new);
요약
• 중간 연산: 스트림을 변환하거나 필터링하는 연산으로, 지연 연산(lazy evaluation) 특성을 가집니다. (예: filter, map, distinct, sorted)
• 최종 연산: 스트림을 소비하여 결과를 생성하는 연산으로, 스트림 파이프라인을 실행합니다. (예: forEach, collect, reduce, count)
'Java > Java 8' 카테고리의 다른 글
Executor 를 CompletableFuture와 같이 사용하는 방법 (0) | 2024.06.07 |
---|---|
자바 CompletableFuture 를 사용하여 비동기 프로그래밍 구현 (0) | 2024.06.07 |
스트림 API와 람다 표현식 소개 (0) | 2024.06.07 |
Optional in java 8 example 예제 (0) | 2023.08.30 |
[자바] Java 8 스트림 특징 (0) | 2020.12.18 |