java - 具有重复键的 Kotlin toMap 收集器

标签 java kotlin java-stream

我要找 Kotlin Java 流收集器的模拟 Collectors.toMapmergeFunction范围。

例如,在 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集电极。

关于java - 具有重复键的 Kotlin toMap 收集器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61069505/

相关文章:

java - 登录时获取随机 toast

java - 非标准字符: Strange Interactions With CSV Files [Java]

kotlin flow onEach 没有被触发

Android Keystore 解密加密数据给出不正确的结果

java - 如何添加 onClick 到此?

java - 如何在 Java 中以最高效和优雅的方式使用并行处理

java - 无限 IntStream 的长度?

java gwt 脚本导致浏览器运行缓慢

java - java中num%2是什么意思?

Java Stream - 收集器内的类型推断问题