반응형

중간 연산은 스트림 파이프라인에서 데이터를 변환하고 필터링하는 작업을 수행합니다.

중간 연산은 지연 연산(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)

반응형

+ Recent posts