我正在尝试创建#标签和相应交易总和的地图。我从交易清单开始。每个标签都可以在其中包含多个标签。在convertToSingleHashtagPerTransaction
中,我提取每个主题标签并将事务添加到列表中,以便每个事务仅具有一个主题标签。然后,我按主题标签分组,最后,我想摆脱交易对象并获得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()
}
}
最后,我一直得到列表而不是列表。
答案 0 :(得分:1)
当我向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()
}