kotlin - Kotlin FP:将List <String>转换为Map <String,Int>

标签 kotlin functional-programming

我有一个字符串列表,我想转换为出现的 map 。 (〜映射值是字符串在列表中重复多次的计数)

命令式的方式如下

fun transformMap(list: List<String>): Map<String, Int> {
    val map = mutableMapOf<String,Int>()
    for(n in list){
        map.put(n,map.getOrDefault(n,0) + 1)
    }
    return map.toMap()
}

如何以函数式编程方式编写此代码?

在Java 8+中,将这样编写
String[] note;
Map<String, Integer> noteMap = Arrays.stream(note)
         .collect(groupingBy(Function.identity(),
          collectingAndThen(counting(), Long::intValue)));

最佳答案

您可以通过Grouping扩展名使用Kotlin的 Iterable<T>.groupingBy 在一行中完成此操作:

val myList = listOf("a", "b", "c", "a", "b", "a")
val myMap = myList.groupingBy { it }.eachCount()

println(myMap)
// Prints {a=3, b=2, c=1}

关于kotlin - Kotlin FP:将List <String>转换为Map <String,Int>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56410593/

相关文章:

java - Gradle项目中混用Java和Kotlin,Kotlin找不到Java类

android - PowerMock `thenReturn` 不返回模拟静态方法的预期数据?

javascript - 如何在javascript中过滤对象子数组的数组和对象子数组的数组

F# Monad 多参数

android - 加密Room数据库的特定列

java - Kotlin 无法识别 Android XML 元素的 ID

android - RxJava-发出新项目时如何停止正在运行的任务

oop - Scala函数与类二分法

f# - 由于循环引用,确定如何订购 F# 类型的问题

Adventure Works 示例的 F# 代码