我有一个字符串列表,我想转换成事件映射。 (〜映射值是字符串在列表中重复的次数)
当务之急,我会像下面这样写
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)));
答案 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}