我正在寻找带有Kotlin
参数的Java流收集器Collectors.toMap
的mergeFunction
类似物。
例如,在Java中,为了计算String中的字符数,可以使用以下代码段:
Map<Character, Integer> charsMap = s2.chars()
.mapToObj(c -> (char) c)
.collect(Collectors.toMap(Function.identity(), s -> 1, Integer::sum));
如果我们将Java代码段转换为Kotlin,则由于显式类型的使用,它看起来很难看。
private fun countCharsV2(word: String): Map<Char, Int> {
return word.chars()
.mapToObj { it.toChar() }
.collect(
Collectors.toMap(
Function.identity(),
Function { 1 },
BinaryOperator { a: Int, b: Int -> Integer.sum(a, b) }
)
)
}
是否有一位行为类似的 Kotlin 收藏家?
最佳答案
在这种情况下,计算char的最简单方法是:
val charsMap = s.groupingBy { it }.eachCount()
更加常见的是,
groupingBy
是一个功能强大的工具,可以替代toMap
收集器。