Kulwinder Dhanjal
09/20/2021, 4:52 AMlistItems.forEach { widgetData->
if(widgetData.title.contains(keyword, true)){
searchedList.add(widgetData)
}else{
val filteredWidgets = item.widgets.filter { widget ->
widget.title.contains(keyword, true)
}
if (filteredWidgets.isNotEmpty()) {
val newItem = WidgetData(
id = widgetData.id,
title = widgetData.title,
isFree = widgetData.isFree,
theme = widgetData.theme,
thumbnail = widgetData.thumbnail,
widgets = filteredWidgets
)
searchedList.add(newItem)
}
}
}
here is my data classes
data class WidgetData(
val id: Int,
val isFree: Boolean,
val theme: Any,
val thumbnail: String,
val title: String,
var widgets: List<Widget>
)
data class Widget(
val image: String,
val title: String,
val type: String
)
i am sure there will be a better option in kotlin to write this, i am searching for that..ephemient
09/20/2021, 5:01 AMlistItems.mapNotNull { item ->
item.takeIf {
it.title.contains(keyword, ignoreCase = true)
} ?: item.widgets.filter {
it.title.contains(keyword, ignoreCase = true)
}.ifEmpty { null }?.let { item.copy(widgets = it) }
}
Kulwinder Dhanjal
09/20/2021, 5:11 AM