Kotlin FP:将List <string>转换为Map <string,int>

时间:2019-06-01 21:34:48

标签: kotlin functional-programming

我有一个字符串列表,我想转换成事件映射。 (〜映射值是字符串在列表中重复的次数)

当务之急,我会像下面这样写

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)));

2 个答案:

答案 0 :(得分:1)

您也可以在Kotlin中使用流。但是,如果要避免流,可以使用You've got 32792039464 euro and 80 cents. $32.792.39.464,80

fold()

答案 1 :(得分:1)

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

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

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