Java 스트림에서는 변환 연산을 사용하여 스트림의 요소를 다른 형태로 변환할 수 있습니다. 변환 연산은 스트림의 요소를 매핑하거나 필터링하는 데 사용됩니다. 주요한 변환 연산에는 map, flatMap, filter, distinct, sorted 등이 있습니다.
1. map() 변환
map 연산은 각 요소를 특정 함수에 매핑하여 새로운 값을 생성합니다. 예를 들어, 주어진 리스트의 각 숫자를 제곱하여 새로운 리스트를 생성할 수 있습니다.
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> squaredNumbers = numbers.stream()
.map(x -> x * x)
.collect(Collectors.toList());
System.out.println(squaredNumbers); // [1, 4, 9, 16, 25]
2. flatMap() 변환
flatMap은 각 요소를 스트림으로 매핑하고 이를 하나의 스트림으로 평탄화합니다. 이는 중첩된 리스트나 맵을 해체하거나 여러 스트림을 하나로 합치는 데 사용됩니다.
List<List<String>> nestedList = Arrays.asList(
Arrays.asList("apple", "banana"),
Arrays.asList("orange", "grape"),
Arrays.asList("watermelon", "kiwi")
);
List<String> flatList = nestedList.stream()
.flatMap(Collection::stream)
.collect(Collectors.toList());
System.out.println(flatList); // [apple, banana, orange, grape, watermelon, kiwi]
3. filter() 변환
filter 연산은 주어진 조건을 만족하는 요소만을 포함하는 스트림을 생성합니다.
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> evenNumbers = numbers.stream()
.filter(x -> x % 2 == 0)
.collect(Collectors.toList());
System.out.println(evenNumbers); // [2, 4]
4. distinct() 변환
distinct 연산은 중복을 제거한 스트림을 생성합니다.
List<Integer> numbers = Arrays.asList(1, 2, 2, 3, 4, 4, 5);
List<Integer> distinctNumbers = numbers.stream()
.distinct()
.collect(Collectors.toList());
System.out.println(distinctNumbers); // [1, 2, 3, 4, 5]
5. sorted() 변환
sorted 연산은 요소를 정렬한 스트림을 생성합니다.
List<Integer> numbers = Arrays.asList(3, 1, 4, 1, 5, 9, 2, 6, 5);
List<Integer> sortedNumbers = numbers.stream()
.sorted()
.collect(Collectors.toList());
System.out.println(sortedNumbers); // [1, 1, 2, 3, 4, 5, 5, 6, 9]
이러한 변환 연산을 통해 스트림은 초기 데이터를 다양한 방식으로 가공하고 처리할 수 있습니다. 이는 간결하면서도 강력한 코드를 작성할 수 있게 해줍니다.
With ChatGPT
'JAVA > 포스팅' 카테고리의 다른 글
자바 바이트기반 스트림 (0) | 2023.11.25 |
---|---|
자바 입출력 (0) | 2023.11.25 |
자바 Collector구현하기 (0) | 2023.11.25 |
자바 collect() (0) | 2023.11.25 |
자바 스트림의 최종연산 (0) | 2023.11.25 |