반응형
// List<BigDecimal> 에서 합계를 구하는 경우
List<BigDecimal> bigDecimals = List.of(BigDecimal.ONE, BigDecimal.ONE);
bigDecimals.stream().reduce(BigDecimal.ZERO, BigDecimal::add);
// List<Class> 에서 합계를 구하는 경우
List<TestDto> testDtos = List.of(TestDto.builder().id(1L).value(BigDecimal.TEN).build(),
TestDto.builder().id(1L).value(BigDecimal.ONE).build());
testDtos.stream().map(m -> m.getValue()).reduce(BigDecimal.ZERO, BigDecimal::add);
자바에서 BigDecimal 형태의 List 합계를
stream을 사용해서 구하려는 경우
reduce 메소드를 사용하면 간단히 해결이 된다
reduce 메소드는
list.stream.reduce(초기값, 계산식);
이렇게 사용해주면 되는데
위 코드를 보면
reduce(BigDecimal.ZERO, BigDecimal::add)
이렇게 작성한 것이 보이는데
초기값은 0으로 설정하고
나머지를 더해서 2를 Return하게 된다
다음은 List<Class> 형태일 경우
Class 안에 있는 특정 BigDecimal 변수만 꺼내
합계를 구해주려면
중간에 map 메소드를 사용해서
BigDecimal 변수만 꺼내주면 되는데
코드로 보자면
map(m -> m.getValue()).reduce(BigDecimal.ZERO, BigDecimal::add)
map 메소드를 사용해서
BigDecimal 변수만 꺼내온 후
(getValue 메소드는 해당 Class에서 Getter 생성해야 함)
동일하게 reduce로 합쳐주면 된다
위 코드로 결과를 보면
0 + 10 + 1을 해서 11을 Return 하게 된다
반응형
'Language > Java' 카테고리의 다른 글
자바 DTO 클래스 내 모든 변수가 NULL인지 확인방법 (0) | 2022.10.11 |
---|---|
자바 List 선언과 동시에 초기화하는 방법 (1) | 2022.09.19 |
자바 List<class>를 Page로 Return 하는 방법 (0) | 2022.08.09 |
Querydsl qEntity 안생기는 경우 해결방법 (0) | 2022.08.07 |
자바 LocalDateTime 날짜 Format 적용방법 (0) | 2022.08.07 |
댓글