Java 8 stream.collect(Collectors.toMap())模拟在kotlin中

Yur*_*rii 7 java sequence collect kotlin java-stream

假设我有一个人员列表并希望拥有Map<String, Person>,其中String是人名.我应该怎么做kotlin?

hot*_*key 14

假设你有

val list: List<Person> = listOf(Person("Ann", 19), Person("John", 23))
Run Code Online (Sandbox Code Playgroud)

这个associateBy功能可能会让你满意:

val map = list.associateBy({ it.name }, { it.age })
/* Contains:
 * "Ann" -> 19
 * "John" -> 23
*/
Run Code Online (Sandbox Code Playgroud)

正如KDoc所说associateBy:

返回Map包含valueTransformkeySelector应用于给定数组的元素的函数提供和索引的值的a .

如果任何两个元素将具有由keySelector最后一个返回的相同键,则将其添加到地图中.

返回的映射保留原始数组的条目迭代顺序.

它适用于任何Iterable.