JAVA · 함수형/Stream
커스텀 Collector와 함수형 집계
함수형 프로그래밍 관점에서 Collector를 활용한 데이터 집계를 다룹니다.
함수형/Stream고급Collectorteeingfiltering함수형집계
핵심 설명
함수형 프로그래밍 관점에서 Collector를 활용한 데이터 집계를 다룹니다.
Java code
import java.util.*;
import java.util.stream.*;
public class FPCollector {
record Transaction(String type, double amount) {}
public static void main(String[] args) {
List<Transaction> txns = List.of(
new Transaction("입금", 50000),
new Transaction("출금", 20000),
new Transaction("입금", 30000),
new Transaction("출금", 10000),
new Transaction("입금", 45000)
);
// 타입별 합계를 한 번의 스트림으로
Map<String, DoubleSummaryStatistics> summary = txns.stream()
.collect(Collectors.groupingBy(
Transaction::type,
Collectors.summarizingDouble(Transaction::amount)));
summary.forEach((type, stats) ->
System.out.printf("%s: 합계=%.0f, 평균=%.0f, 건수=%d%n",
type, stats.getSum(), stats.getAverage(), stats.getCount()));
// teeing — 두 Collector 결과 합치기 (Java 12+)
String report = txns.stream().collect(
Collectors.teeing(
Collectors.filtering(t -> t.type().equals("입금"),
Collectors.summingDouble(Transaction::amount)),
Collectors.filtering(t -> t.type().equals("출금"),
Collectors.summingDouble(Transaction::amount)),
(income, expense) -> String.format(
"입금: %.0f, 출금: %.0f, 잔액: %.0f",
income, expense, income - expense)
));
System.out.println(report);
}
}학습 팁
Collectors.teeing()(Java 12+)은 하나의 스트림에서 두 가지 집계를 동시에 수행할 때 유용합니다.
주의할 점
Collectors.filtering()은 Java 9+에서 추가되었습니다. 이전 버전에서는 stream().filter().collect()를 사용하세요.
자주 묻는 질문
커스텀 Collector와 함수형 집계란 무엇인가요?
함수형 프로그래밍 관점에서 Collector 를 활용한 데이터 집계를 다룹니다.
커스텀 Collector와 함수형 집계 학습 시 주의할 점은 무엇인가요?
Collectors.filtering() 은 Java 9+에서 추가되었습니다. 이전 버전에서는 stream().filter().collect() 를 사용하세요.
Continue Learning
Java 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.