백엔드 공부진행도/Java
Stream 사용법
myeongjaechoi
2025. 2. 23. 15:54
Stream
- 원본 데이터 소스를 변경 X -> 읽기 전용
- 병렬 처리 용이 -> 멀티쓰레드 사용
List<Integer> integerList = Arrays.asList(1, 2, 3);
integerList.stream()
.filter(n -> n < 3)
.forEach(System.out::println);
}
filter
- 스트림의 각 요소에 대해 조건을 평가
- 조건이 'true'인 경우 해당 요소는 스트림에 남고, 'false'인 경우 제외
- 위 예시
- 리스트의 각 요소 'n'에 대해 조건 'n < 3'을 평가
- 조건이 참인 요소만 다음 단계로 전달(forEach)
- 1, 2 참 3 거짓
forEach
- 스트림의 종료 연산으로, 스트림의 각 요소에 대해 특정 작업을 수행
- 스트림의 모든 요소를 순회하며 주어진 동작을 실행
- 반환값이 없다.
- 위 예시
- 필터링된 결과인 1, 2 가 각각 출력된다.
List<String> stringList = Arrays.asList("1", "2", "3");
stringList.stream()
.map(Integer::parseInt)
.forEach(System.out::println);
}
map
- 스트림 내 각 요소들을 특정 값으로 변환하는 작업
- 값을 변환하기 위한 람다를 인자로 받음
- 위 예시
- Integer 자료형의 1,2,3
List<String> stringList = Arrays.asList("3", "2", "1");
List<Integer> sortedNumbers = stringList.stream()
.map(Integer::parseInt)
.sorted()
.toList();
System.out.println(sortedNumbers);
sorted() 정렬
- 오름차순으로 정렬 수행
- 위 예시
- 1, 2, 3으로 정렬된 sortedNumbers가 만들어진다.
List<String> stringList = Arrays.asList("3", "2", "1");
int sum = stringList.stream()
.map(Integer::parseInt)
.reduce(0,Integer::sum);
System.out.println(sum);
reduce()
- 요소 누적 연산
- 위 예시
- 초기값을 0으로 하고, 각 요소를 더한다.
- 결과 6
public static double calculate(List<Double> operands, Operation operator) {
return operands.stream().reduce(operator::calculate).orElseThrow(() ->
new IllegalArgumentException(MUST_CHANGE_NUMBER.getMessage()));
}
- 각 요소의 operands가 operator의 calculate 메서드를 실행
- 스트림이 비어있지 않으면, operands의 첫번째 요소가 초기값으로 이용
- 결과를 반환