Kotlin地图值转换-计算列表内的总和并返回地图

时间:2018-12-21 15:26:10

标签: algorithm data-structures kotlin

我正在尝试创建#标签和相应交易总和的地图。我从交易清单开始。每个标签都可以在其中包含多个标签。在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()
    }
}

最后,我一直得到列表而不是列表。

1 个答案:

答案 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()
            }