본문 바로가기
Language/Java

자바 List<BigDecimal> Stream으로 합계 구하는 방법

by wakestand 2022. 8. 9.
반응형
// 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 하게 된다

반응형

댓글