首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kotlin:列表中BigDecimal的和

问Kotlin:列表中BigDecimal的和
EN

Stack Overflow用户
提问于 2016-09-30 14:14:33
回答 5查看 14.7K关注 0票数 14

我有一个要过滤的列表,然后返回一个id映射,其中包含金额之和:

代码语言:javascript
复制
val totalById = list
                    .filter { it.status == StatusEnum.Active }
                    .groupBy { it.item.id }
                    .mapValues { it.value.sumBy { it.amount } }

"it.amount“是BigDecimal,但看起来sumBy只是Int。

对于java 8来说,应该是:

Collectors.groupingBy(i-> i.getItem().getId(), Collectors.mapping(Item::getAmount, Collectors.reducing(BigDecimal.ZERO, BigDecimal::add))))

在科特林有办法吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2016-09-30 15:44:23

就像在java中使用Collectors.reducing一样,您可以在Kotlin中使用fold或reduce扩展函数:

代码语言:javascript
复制
val bigDecimals: List<BigDecimal> = ...
val sum = bigDecimals.fold(BigDecimal.ZERO) { acc, e -> acc + e }
// or
val sum2 = bigDecimals.fold(BigDecimal.ZERO, BigDecimal::add)

关于play.kotlinlang.org:https://pl.kotl.in/o6pRhrqys的完整示例

从Kotlin 1.4开始,现在有一个函数sumOf,它接受一个选择器函数并对这个选择器返回的所有值进行求和,因此您可以如下所示:

代码语言:javascript
复制
val totalById = list
                .groupBy { it.id }
                .mapValues { it.value.sumOf { it.amount } }

关于play.kotlinlang.org:https://pl.kotl.in/jXAfoyff-的完整示例

票数 34
EN

Stack Overflow用户

发布于 2016-09-30 14:35:36

您可以创建自己的sumByBigDecimal 扩展函数,类似于sumByDouble。例如:

代码语言:javascript
复制
/**
 * Returns the sum of all values produced by [selector] function applied to each element in
 * the collection.
 */
inline fun <T> Iterable<T>.sumByBigDecimal(selector: (T) -> BigDecimal): BigDecimal {
    var sum: BigDecimal = BigDecimal.ZERO
    for (element in this) {
        sum += selector(element)
    }
    return sum
}

示例用法:

代码语言:javascript
复制
val totalById = list
        .filter { it.status == StatusEnum.Active }
        .groupBy { it.item.id }
        .mapValues { it.value.sumByBigDecimal { it.amount } }
票数 9
EN

Stack Overflow用户

发布于 2020-10-26 12:02:31

在Kotlin1.4中,他们引入了sumOf,它的用法:

代码语言:javascript
复制
val bigDecimals: List<BigDecimal> = ...
val sum = bigDecimals.sumOf { it }

文档

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39793600

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档