java - 使用 jOOλ 按属性总结 BigDecimal 分组

标签 java stream tuples jool-library

我正在尝试使用 jOOλ 库 ( https://github.com/jOOQ/jOOL ) 总结 Bigdecimal 字段

这是我的代码,但它仅适用于总结 double 。 这里我对字段 x 求和,并按字段 w,z 分组:

class A {
    final int w;
    final Double x;
    final int y;
    final int z;

    A(int w, Double x, int y, int z) {
        this.w = w;
        this.x = x;
        this.y = y;
        this.z = z;
    }
}

Map<
    Tuple2<Integer, Integer>,
    DoubleSummaryStatistics
> map =
Seq.of(
    new A(1, 1.01D, 1, 1),
    new A(1, 2.09D, 3, 1),
    new A(1, 8D, 6, 1),
    new A(2, 119D, 7, 2),
    new A(1, 3.01D, 4, 1),
    new A(1, 4D, 4, 1),
    new A(1, 5D, 5, 1))
.groupBy(
    t -> tuple(t.z, t.w),
    Tuple.collectors(
        Collectors.summarizingDouble(t -> t.x)
    )
);

map.entrySet().forEach(t-> {
    log.info("w={}, z={}, sumX={}", t.getKey().v1, t.getKey().v2,
            t.getValue().getSum());
});

有没有办法使用 BigDecimal 而不是 Double,使用该库? 我只需要使用 BigDecimal,因为我想用它来总结财务操作。

如有任何帮助,我们将不胜感激。

最佳答案

该问题与 jOOλ 没有直接关系,而是与您对 JDK 标准 Collector 的使用有关,该标准生成如方法名称所示的 double :

Collectors.summarizingDouble(t -> t.x)

j 在 org.jooq.lambda.Agg 中附带了自己的一组 Collector 构造 API。在您的情况下,您想使用 Agg.sum(Function) .

显然,首先更改您的类A:

class A {
    final int w;
    final BigDecimal x;
    final int y;
    final int z;
    ...
}

然后:

Map<
    Tuple2<Integer, Integer>,
    Optional<BigDecimal>
> map =
Seq.of(
    new A(1, new BigDecimal("1.01"), 1, 1),
    new A(1, new BigDecimal("2.09"), 3, 1),
    new A(1, new BigDecimal("8"), 6, 1),
    new A(2, new BigDecimal("119"), 7, 2),
    new A(1, new BigDecimal("3.01"), 4, 1),
    new A(1, new BigDecimal("4"), 4, 1),
    new A(1, new BigDecimal("5"), 5, 1))
.groupBy(
    t -> tuple(t.z, t.w),
    Agg.sum(t -> t.x)
);

map.entrySet().forEach(t-> {
    System.out.println(String.format("w=%s, z=%s, sumX=%s", t.getKey().v1, t.getKey().v2,
            t.getValue().orElse(BigDecimal.ZERO)));
});

关于java - 使用 jOOλ 按属性总结 BigDecimal 分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50542828/

相关文章:

python - C++ Qt 相当于 python unpack_from

arrays - 接受二维数组并返回数组列的元组的函数?

python - 使用字典作为参数映射 Pandas 系列,其中值是元组

java - 在给定其他先验概率的情况下估计概率

java - 获取名称时出错 :value pair from JSON

java - servlet的使用比struts2中的action-classes好吗?

android - 如何在android中通过蓝牙向配对设备发送短信?

design-patterns - 如何在社交网络中实现事件流

python - 如何从python中的两个列表生成嵌套列表

java - 如何使用 printwriter 连接单独的方法?