我正在尝试创建标签 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/