gregorbg
03/20/2019, 5:21 PMJavaObject
class in the first place is not an option.wbertan
03/20/2019, 5:27 PMjavaObjects
.mapNotNull {
val foo = it.fooProperty ?: return@mapNotNull null
val bar = it.barProperty ?: return@mapNotNull null
KotlinDataClass(foo, bar)
}
gregorbg
03/20/2019, 5:29 PMreturn@mapNotNull null
kills readability even more, but I guess that's just personal tastewbertan
03/20/2019, 5:31 PMreturn
in the code, but I remember having this case before, and the team agreed was more readable those return@
than the enclosed `let`s.fun <T, Z> Pair<T?, Z?>.pairOrNull(): Pair<T, Z>? {
val first = first ?: return null
val second = second ?: return null
return Pair(first, second)
}
fun doSomething(javaObjects: List<JavaObject>): List<KotlinDataClass> =
javaObjects
.mapNotNull {
Pair(it.fooProperty, it.barProperty)
.pairOrNull()
?.let { (foo, bar) -> KotlinDataClass(foo, bar) }
}
Ruckus
03/20/2019, 6:35 PMfun doSomething(javaObjects: List<JavaObject>): List<KotlinDataClass> {
val data = mutableListOf<KotlinDataClass>()
for (j in javaObjects) data += KotlinDataClass(
j.fooProperty ?: continue,
j.barProperty ?: continue
)
return data
}
Alowaniak
03/21/2019, 7:44 AMNullableKotlinDataClass
"factory" method?
fun NullableKotlinDataClass(foo: Any?, bar: Any?): KotlinDataClass? {
return KotlinDataClass(foo ?: return null, bar ?: return null)
}
fun doSomething(javaObjects: List<JavaObject>): List<KotlinDataClass> {
return javaObjects.mapNotNull {
NullableKotlinDataClass(it.fooProperty, it.barProperty)
}
}
Perhaps as an extension function on JavaObject
so you can do:
fun JavaObject.toKotlinDataClassOrNull(): KotlinDataClass? {
return KotlinDataClass(fooProperty ?: return null, barProperty ?: return null)
}
fun doSomething(javaObjects: List<JavaObject>): List<KotlinDataClass> {
return javaObjects.mapNotNull(JavaObject::toKotlinDataClassOrNull)
}
uhe
03/21/2019, 10:01 AMif
instead of the let
nesting:
class Foo(val a: String?, val b: String?)
class Bar(val a: String, val b: String)
fun foo(foos: List<Foo>): List<Bar> =
foos.mapNotNull {
if (it.a != null && it.b != null)
Bar(it.a, it.b)
else null
}
}