Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
489 views
in Technique[技术] by (71.8m points)

kotlin - How to reverse a map and group values in a list?

I have the following map

val mapToTransform = mapOf(1 to 4, 2 to 5, 4 to 4, 6 to 3, 9 to 3)    

I want to transform it to the map

val transformedMap = mapOf(3 to listOf(6,9), 4 to listOf(1,4), 5 to listOf(2))

My attempt is the following:

val attempt = mapToTransform.map{ it.value to it.key}.groupBy{it.first}

that gives {4=[(4, 1), (4, 4)], 5=[(5, 2)], 3=[(3, 6), (3, 9)]}.

Any help?

question from:https://stackoverflow.com/questions/66050404/how-to-reverse-a-map-and-group-values-in-a-list

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

There is an overload of groupBy that takes a valueTransform in addition to the keySelector:

mapToTransform.map { it.value to it.key }.groupBy({ it.first }, { it.second })

But then you can simplify your first part, as you don't need to swap things up front:

mapToTransform.entries.groupBy({ it.value }, { it.key })

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...