So I've been trying to make a Map from a List in Kotlin, and as I have not much experience with Kotlin and not much experience with Maps, I turn to the Internet.
Funnily enough, after getting it working, my IDE keeps giving me subtle hints that it can be shorter and more concise.
I thought it would be nice to put the steps here.
val primaryKeys = listOf(12L, 15L, 16L, 22L, 204L) val firstTry = primaryKeys.map { it to getUser(it) }
In the example above it's not a Map yet, but it's a good first step.
As you can tell, it transforms your list into another List of type List<Pair<Long, User>>.
Kotlin has a toMap() method that does what we want.
@Test fun testListToMapConversion() { val primaryKeys = listOf(12L, 15L, 16L, 22L, 204L) val map = primaryKeys.map { it to getUser(it) }.toMap() assertThat(map).isEqualTo( mapOf( 12L to User(12L, "Bob"), 15L to User(15L, "Jimmy"), 16L to User(16L, "Jack"), 22L to User(22L, "Henry"), 204L to User(204L, "William") ) ) }
Now my IDE tells me this can be shortened.
@Test fun testListToMapConversion() { val primaryKeys = listOf(12L, 15L, 16L, 22L, 204L) val map = primaryKeys.associate { it to getUser(it) } assertThat(map).isEqualTo( mapOf( 12L to User(12L, "Bob"), 15L to User(15L, "Jimmy"), 16L to User(16L, "Jack"), 22L to User(22L, "Henry"), 204L to User(204L, "William") ) ) }
Now my IDE tells me this can be shortened AGAIN!
@Test fun testListToMapConversion() { val primaryKeys = listOf(12L, 15L, 16L, 22L, 204L) val map = primaryKeys.associateWith { getUser(it) } assertThat(map).isEqualTo( mapOf( 12L to User(12L, "Bob"), 15L to User(15L, "Jimmy"), 16L to User(16L, "Jack"), 22L to User(22L, "Henry"), 204L to User(204L, "William") ) ) }
Nice!
References
- Syntax Highlighter
- https://highlight.hohli.com/
No comments:
Post a Comment