Vivek Modi
06/01/2022, 2:19 PMEvent
. I want to combine all property value into single string. I did this without any problem. I want to know is there any better way to optimise this code in memory, efficiency etc.
SingleEventString.kt
fun main() {
var newString: String? = null
val eventList = createData()
eventList.forEachIndexed { index, event ->
val title = event.title
val status = event.status
if (!title.isNullOrEmpty()) {
newString = if(index == 0){
"$title"
}else{
"$newString $title"
}
}
if (!status.isNullOrEmpty()) {
newString = "$newString $status"
}
}
println(newString)
}
data class Event(val title: String? = null, val status: String? = null)
fun createData() = listOf(
Event("text 1", "abc"),
Event("text 2", "abc"),
Event("text 3", "abc"),
Event("text 4", "abc"),
Event("", "abc"),
Event(null, "abc")
)Sam
06/01/2022, 2:27 PMLuke
06/01/2022, 2:31 PMeventList.fold(StringBuilder()) { builder, event -> ... }.toString()
Vivek Modi
06/01/2022, 2:33 PMLuke
06/01/2022, 2:36 PMeventList.joinToString(separator = " ") { event -> ... }
. This maps each event to a string and concats them with a space separatorVivek Modi
06/01/2022, 2:38 PMfun main() {
var newString: String? = null
val eventList = createData()
eventList.joinToString(separator = " ") { event ->
val title = event.title
val status = event.status
if (!title.isNullOrEmpty()) {
newString = "$newString $title"
}
if (!status.isNullOrEmpty()) {
newString = "$newString $status"
}
newString.toString()
}
println(newString)
}
and getting this
null text 1 abc text 2 abc text 3 abc text 4 abc abc abc
How to remove null in this ?Luke
06/01/2022, 2:55 PMval newString = eventList.joinToString(separator = " ") { event ->
when {
title.isNullOrEmpty() -> status.orEmpty()
status.isNullOrEmpty() -> title
else -> "$title $status"
}
}
Vivek Modi
06/01/2022, 3:00 PMevent.title.isNullOrEmpty() -> event.status.orEmpty()
2.
event.status.isNullOrEmpty() -> event.title
why 1st one have orEmpty()
and 2nd don't ?Luke
06/01/2022, 3:05 PMval newString = createData().asSequence()
.flatMap { sequenceOf(it.title, it.status) }
.filterNotNull()
.filterNot { it.isEmpty() }
.joinToString(separator = " ")
Vivek Modi
06/01/2022, 3:11 PMnkiesel
06/01/2022, 5:21 PM.filterNotNull().filterNot { it.isEmpty() }
with .filterNot { it.isNullorEmpty() }
Vivek Modi
06/01/2022, 5:22 PMephemient
06/01/2022, 9:47 PMcreateData().flatMap {
listOfNotNull(
it.title?.ifEmpty { null },
it.status?.ifEmpty { null },
}
}.joinToString(separator = " ")
Vivek Modi
06/02/2022, 8:42 AMflatMap
and Map
? Thanksephemient
06/02/2022, 9:29 AM.flatMap { … }
behaves like .map { … }.flatten()
nkiesel
06/02/2022, 9:38 AMlistOf(Data("t1", null), Data(null, "s2"), Data("t3", "s3")).map { listOfNotNull( it.title?.ifEmpty { null }, it.status?.ifEmpty { null }) } // [[t1], [s2], [t3, s3]]
listOf(Data("t1", null), Data(null, "s2"), Data("t3", "s3")).flatMap { listOfNotNull( it.title?.ifEmpty { null }, it.status?.ifEmpty { null }) } // [t1, s2, t3, s3]
Vivek Modi
06/02/2022, 9:50 AM