algorithm - Kotlin 映射值转换 - 计算列表内的总和并返回映射

标签 algorithm data-structures kotlin

我正在尝试创建标签 map 和相应交易的总和。我从交易 list 开始。每个里面都可以有几个标签。在 convertToSingleHashtagPerTransaction 中,我提取每个主题标签并将交易添加到列表中,以便每个交易只有一个主题标签。然后我按主题标签分组,最后,我想摆脱 Transaction 对象并获得 String(hashtag)、Double(相应交易的总和) 的映射。

val hashtagsAmountMap = transactions
            .filter { !it.note.isNullOrEmpty() }
            .filter { it.note!!.contains(HASHTAG_LEFT_SIDE) }
            .flatMap { convertToSingleHashtagPerTransaction(it) }
            .groupBy { it.note }
            .onEach {
                it.value
                        .map { it.inGlobalCurrency!! }
                        .sumByDouble { it }
            }

private fun convertToSingleHashtagPerTransaction(t: Transaction): List<Transaction> {
    val note = t.note
    if (note != null) {
        return extractHashtags(note)
                .map {
                    t.copy(note = it.toUpperCase())
                }
    } else {
        return arrayListOf()
    }
}

最后我一直得到 List 而不是 List。

最佳答案

当我向 StackOverflow 发布问题后,我自己想出了答案:

val hashtagsAmountMap = transactions
            .filter { !it.note.isNullOrEmpty() }
            .filter { it.note!!.contains(HASHTAG_LEFT_SIDE) }
            .flatMap { convertToSingleHashtagPerTransaction(it) }
            .groupBy { it.note }
            .mapValues { entry ->
                entry.value
                        .map { it.amountGlobalCurrency!! }
                        .sum()
            }

关于algorithm - Kotlin 映射值转换 - 计算列表内的总和并返回映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53887238/

相关文章:

algorithm - 在 O(lgn) 时间内修改堆

algorithm - 在节点的键更改后使多路树成为堆?

c++ - 将 5 个 vector 合并到矩阵 C++

algorithm - 完全正确

c - 谁抛出段错误?

java - 如果有父级,Quarkus 不会构建

kotlin - 通过反射获取纯Kotlin属性的注释的合法方法是什么,它们总是丢失吗?

c - 远离循环

ruby - 我们如何在 Ruby 中进行图形表示

android - 刷新 MediaBrowserService 订阅内容