Ich habe eine Java-Klasse wieJava 8-Gruppe durch und BigDecimal
public class A {
private int id;
private BigDecimal amount;
}
ich zu einer Gruppe von ID mit Java 8 mehrere Objekte wie diese möchte:
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);
}
}
Und der Ausgang ist:
1 500,36
2 499,91
Was genau ich suche. Aber, es gibt die Collectors.summingDouble
Operation und ich weiß, dass Double
nicht für Währungsoperationen geeignet ist. Also habe ich Probleme mit dieser Methode (Arbeiten an Geldoperationen) oder gibt es eine Möglichkeit, dies mit BigDecimal zu tun?
EDIT diese Methode gefunden:
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)));
Bitte nicht setzen Antwort in Frage. Posten Sie es separat mit "Post your answer". – talex