2017-01-31 2 views
1

우리는 모든 값 int거나 내가 어떻게 BigDecimal의 값의 목록을

return items.stream().mapToInt(i -> i).sum(); 

목록 긴 또는 다른 원시 데이터 형식 값은 우리가 사용하는 모든 값의 태양을 취득하는 경우 나는 일반지도를 만들려고 mapToBigDecimal 같은 디폴트 방법이 없기 때문에 Java8

를 사용하여 모든 값의 합을 찾을 그때 당신은 Stream#reduce(BinaryOperator)을 사용할 수 있습니다 sum()

답변

0
List<BigDecimal> items = Arrays.asList(BigDecimal.ONE, BigDecimal.valueOf(1.5), BigDecimal.valueOf(100)); 
items.stream().reduce(BigDecimal.ZERO, BigDecimal::add); 
Lisq199에서 제공

비록 응답이 작동하지만 내가 홀거 및 Klitos 의견을 포함하여 찬성입니다, 이것은 어떤 값을 처리하지 않고 항상 값

2

을 사용할 수 없습니다.

간단한 예 :

List<BigDecimal> items = Arrays.asList(BigDecimal.ONE, BigDecimal.valueOf(1.5), BigDecimal.valueOf(100)); 
items.stream().reduce((i, j) -> i.add(j)).ifPresent(System.out::println); 
// Outputs 102.5 
+1

또는를 반환 리스트가 하늘의 경우는 0을 돌려주고 싶다.'.reduce (BigDecimal.ZERO, (i, j) -> i.add (j))'- 이것은 Optional 대신 BigDecimal를 리턴한다. –

+0

람다를 메소드 참조'BigDecimal :: add'로 대체하는 것이 가능합니다. 왜냐하면 그것은'BinaryOperator'로 컴파일 될 수 있기 때문입니다. 'MathContext'가 없으면'add'도'ArithmeticExceptions'을 생성 할 수 있기 때문에 저는 조언하지 않을 것입니다. 보다 안전한 구현은, MathContext를 선택해, 그 존재를 「추가」하는 람다를 사용하는 것입니다. –

+0

추가에 중립 요소가 있기 때문에'reduce (BigDecimal.ZERO, BigDecimal :: add)'를 사용할 수 있으며'Optional'을 다룰 필요가 없습니다. – Holger