public class Clazz {
    int type;
    int value;
    BigDecimal dValue;
 
    public Clazz(int type, BigDecimal dValue) {
        this.type = type;
        this.dValue = dValue;
    }
 
    public Clazz(int type, int value) {
        this.type = type;
        this.value = value;
    }
 
    public int getType() {
        return type;
    }
 
    public int getValue() {
        return value;
    }
 
    public BigDecimal getDValue() {
        return dValue;
    }
}

 

List<Clazz> l = Arrays.asList(
                new Clazz(1,1),
                new Clazz(2,1),
                new Clazz(3,1),
                new Clazz(3,2),
                new Clazz(1,3));

l.stream().collect(Collectors.groupingBy(e -> e.getType(), Collectors.summingInt(e -> e.getValue()))).forEach((id, sum) -> System.out.println(id+"\t"+sum));

 

Output is:
1   4
2   1
3   3

 

List<Clazz> dl = Arrays.asList(
                new Clazz(1, new BigDecimal(1.1)),
                new Clazz(2,new BigDecimal(1.2)),
                new Clazz(3,new BigDecimal(1.3)),
                new Clazz(3,new BigDecimal(2.2)),
                new Clazz(1,new BigDecimal(3.3)));

dl.stream().collect(Collectors.groupingBy(e -> e.getType(), Collectors.mapping(e -> e.getDValue(), Collectors.reducing(BigDecimal.ZERO, BigDecimal::add))))
                .forEach((id, sum)->System.out.println(id+"\t"+sum.setScale(2, RoundingMode.HALF_UP)));

Output is:

1   4.40
2   1.20
3   3.50