Ben böyle java 8 birkaç nesnelerle id göre gruplandırmak istiyorumJava 8 grup ve BigDecimal
public class A {
private int id;
private BigDecimal amount;
}
gibi bir Java sınıfı:
public class Main {
public static void main(String[] args) {
A a1 = new A(1, new BigDecimal("500.36"));
A a2 = new A(2, new BigDecimal("439.97"));
A a3 = new A(2, new BigDecimal("49.97"));
A a4 = new A(2, new BigDecimal("9.97"));
List<A> postings = new ArrayList<>();
postings.add(a1);
postings.add(a2);
postings.add(a3);
postings.add(a4);
List<A> brol = new ArrayList<>();
System.out.println("-----------------");
postings.stream()
.collect(Collectors.groupingBy(A -> A.getId(), Collectors.summingDouble(A->A.getAmount().doubleValue())))
.forEach((id, sum) -> brol.add(new A(id, BigDecimal.valueOf(sum))));
brol.forEach(System.out::println);
}
}
Ve çıktısı:
1 500,36
2 499,91
Tam olarak aradığım şey bu. Ancak, Collectors.summingDouble
işlemi var ve Double
'un para birimi işlemleri için uygun olmadığını biliyorum. Yani bu yöntemle (para işlemleri üzerinde çalışıyor) problemlerim olacak mı yoksa BigDecimal ile yapmanın bir yolu var mı? Bu yöntemi Bulunan
DÜZENLEME :
postings.stream()
//.collect(Collectors.groupingBy(A -> A.getId(), Collectors.summingDouble(A->A.getAmount().doubleValue())))
.collect(Collectors.groupingBy(A -> A.getId(), Collectors.reducing(BigDecimal.ZERO, A::getAmount, BigDecimal::add)))
.forEach((id, sum) -> brol.add(new A(id, sum)));
sorunuzun cevabını koymayınız. "Cevabınızı yayınlayın" a basarak ayrı olarak yayınlayın. – talex