eyesofkhepri
01. List값에서 다중 키값으로 여러 필드들을 그룹화 본문
01. List값에서 다중 키값으로 여러 필드들을 그룹화
예제코드 - GroupingExam1
/** * 특정 객체를 갖는 List값에서 특정 다중 ID값으로 여러 데이터를 그룹화 하는 예제 */ public class GroupingExam1 { public static void main(String[] args) { Listresult = Arrays.asList( new DeptSales("AOrga","ADept", 100000L, 2000L, 300L), new DeptSales("AOrga","ADept", 27000L, 560000L, 31000L), new DeptSales("AOrga","BDept", 6010000L, 20000L, 5000L), new DeptSales("AOrga","BDept", 130000L, 22000L, 343000L), new DeptSales("AOrga","CDept", 500010L, 52000L, 3000L), new DeptSales("AOrga","CDept", 100010L, 230000L, 350000L)) .stream() .collect(Collectors.groupingBy(f -> f.getOrganization() + "_" + f.getDeptName())) .entrySet().stream() .map(g -> g.getValue().stream().reduce((a1, a2) -> { return new DeptSales(a1.getOrganization(), a2.getDeptName(), a1.getRevenue() + a2.getRevenue(), a1.getLoss() + a2.getLoss(), a1.getPurchase() + a2.getPurchase()); })).map(m -> m.get()).collect(Collectors.toList()); // [ // DeptSales(organization=AOrga, deptName=CDept, revenue=600020.0, loss=282000.0, purchase=353000.0), // DeptSales(organization=AOrga, deptName=ADept, revenue=127000.0, loss=562000.0, purchase=31300.0), // DeptSales(organization=AOrga, deptName=BDept, revenue=6140000.0, loss=42000.0, purchase=348000.0) // ] System.out.println(result); } }
예제코드 - DeptSales
/** * 부서별 수익 손해 비용과 관련된 모델 */ @Data public class DeptSales { // 조직명 private String organization; // 부서명 private String deptName; // 수익 private double revenue; // 손해비용 private double loss; // 구매비용 private double purchase; public DeptSales() { } public DeptSales(String organization, String deptName, double revenue, double loss, double purchase) { this.organization = organization; this.deptName = deptName; this.revenue = revenue; this.loss = loss; this.purchase = purchase; } }
설명
본 예제는 DeptSales값을 갖는 List객체에서 organization과 deptName을 키로 revenue, loss, purchase를 그룹화 하고 합계를 내는 예제입니다. Collectors.groupingBy()를 사용해서 원하는 키 형태로 그룹화 하고 Reduce()를 통해서 각각의 값을 처리를 했습니다.
Comments