Edward Muller
01/20/2023, 12:11 AMEdward Muller
01/20/2023, 12:12 AMEdward Muller
01/20/2023, 12:14 AMusers.mapNotNull()
Paul Griffith
01/20/2023, 12:20 AMEdward Muller
01/20/2023, 12:25 AMdata class User(val name: String, val age: Int)
fun User.maybeMunge(x: String): () -> Pair<String, Int>? {
return { it ->
if (it.name == "Ed") null else Pair(x + it.name, it.age)
}
}
fun main() {
val users = listOf(User("Ed", 2), User("Sally", 20))
println(users.mapNotNull(User::maybeMunge("x")))
}
or
data class User(val name: String, val age: Int)
fun User.maybeMunge(x: String): () -> Pair<String, Int>? {
return {
if (this.name == "Ed") null else Pair(x + this.name, this.age)
}
}
fun main() {
val users = listOf(User("Ed", 2), User("Sally", 20))
println(users.mapNotNull(User::maybeMunge("x")))
}
Edward Muller
01/20/2023, 12:25 AMEdward Muller
01/20/2023, 12:27 AMEdward Muller
01/20/2023, 12:27 AMEdward Muller
01/20/2023, 12:28 AMPaul Griffith
01/20/2023, 12:29 AMEdward Muller
01/20/2023, 12:29 AMPaul Griffith
01/20/2023, 12:30 AMmapNotNull
. It seems like you’re trying to avoid the “explicit” open lambda body in your mapNotNull
. AFAIK, the only way to do that is with some kind of function literal like I have in my exampleEdward Muller
01/20/2023, 12:31 AMPaul Griffith
01/20/2023, 12:31 AMval users = listOf(User("Ed", 2), User("Sally", 20))
val xed = { it: User -> it.maybeMunge("x") }
println(users.mapNotNull(xed::invoke))
Paul Griffith
01/20/2023, 12:34 AMfun interface
if you want to make the name after the double-colon something other than `invoke`:
fun interface UserMunger {
fun munge(user: User): Pair<String, Int>?
}
fun main() {
val users = listOf(User("Ed", 2), User("Sally", 20))
val yed = UserMunger { it.maybeMunge("y") }
println(users.mapNotNull(yed::munge))
}
Edward Muller
01/20/2023, 12:36 AMusers.mapNotNull { it.maybeMunge("x") }
Really I guess I am trying to do this:
data class User(val name: String, val age: Int)
fun maybeMunge(x: String): (User) -> Pair<String, Int>? {
return { it ->
if (it.name == "Ed") null else Pair(x + it.name, it.age)
}
}
fun main() {
val users = listOf(User("Ed", 2), User("Sally", 20))
val mm = maybeMunge("x")
println(users.mapNotNull(mm::invoke))
}
Edward Muller
01/20/2023, 12:36 AMEdward Muller
01/20/2023, 12:36 AM