스트림은 필터링(filter()), 변환(map()), 정렬(toArray()), 집계(collect())와 같은 작업을 간결하게 처리할 수 있도록 설계되었다.
// 숫자 리스트의 각 요소 출력
import java.util.*;
public class StreamExample {
public static void main(String[] args) {
// 1. 숫자 리스트 생성
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
// Arrays.asList(): 배열을 리스트로 변환.
// 2. 스트림 생성 및 처리
numbers.stream() // 리스트에서 스트림 생성
.forEach(n -> System.out.println(n)); // 각 요소를 출력하는 람다 표현식.
// 출력: 1 2 3 4 5 (각 숫자가 줄바꿈 되어 출력됩니다)
}
}
- stream() : 컬렉션(List, Set 등)에서 스트림을 생성한다.
- forEach() : 스트림의 각 요소에 대해 반복하여 작업을 수행한다.
스트림 연산은 두가지로 나뉜다.
// 조건에 맞는 숫자 필터링
import java.util.*;
public class StreamExample {
public static void main(String[] args) {
// 1. 숫자 리스트 생성
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
// 2. 스트림에서 짝수만 필터링
numbers.stream() // 리스트에서 스트림 생성
.filter(n -> n % 2 == 0) // 짝수만 필터링하는 람다 표현식
.forEach(n -> System.out.println(n)); // 결과 출력
// 출력: 2 4
}
}
- filter() : 스트림의 각 요소를 조건에 따라 걸러낸다.
- n -> n%2 ==0 ; ((int n) -> {n % 2 == 0} 과 동일)
// 요소 변환 (맵핑)
import java.util.*;
public class StreamExample {
public static void main(String[] args) {
// 1. 문자열 리스트 생성
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
// 2. 각 문자열을 대문자로 변환
names.stream() // 리스트에서 스트림 생성
.map(name -> name.toUpperCase()) // 각 이름을 대문자로 변환
.forEach(name -> System.out.println(name)); // 결과 출력
// 출력: ALICE BOB CHARLIE
}
}
- map(): 스트림의 각 요소를 다른 값으로 변환한다.
- name -> name.toUpperCase() name안의 값들을 모두 대문자로 변경
- 기존의 타입을 다른 인스턴스타입으로 바꾸고 싶을 경우 mapToObj 반대의 경우 mapTo기본형 을 사용한다.
- ex. .mapToInt(Integer::parseInt)
// 결과 수집
import java.util.*;
import java.util.stream.Collectors;
public class StreamExample {
public static void main(String[] args) {
// 1. 숫자 리스트 생성
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
// 2. 짝수만 필터링하여 리스트로 수집
List<Integer> evens = numbers.stream() // 스트림 생성
.filter(n -> n % 2 == 0) // 짝수만 필터링
.collect(Collectors.toList()); // 결과를 리스트로 수집
// 3. 결과 출력
System.out.println(evens); // 출력: [2, 4]
}
}
- collect() : 스트림의 결과를 특정 컬렉션(List, Set 등)으로 수집.
- Collectors.toList() : 결과를 리스트로 변환