KotlinLeaner
04/27/2023, 1:09 PMnull
or empty
. I tried to filter basic to avoid null code and replace with empty
1️⃣
fun filterMovieItemList(unfilteredList: List<MovieItem>): List<MovieItemModel> {
val movieItemModelList = mutableListOf<MovieItemModel>()
if (unfilteredList.isNotEmpty()) {
unfilteredList.forEachIndexed { _, movieItem ->
val movieDetails = movieItem.movieDetails
if (movieDetails != null && !movieDetails.name.isNullOrEmpty()) {
val icon = movieDetails.iconUrl ?: "xyz"
movieItemModelList.add(
MovieItemModel(
movieDetails.name,
icon,
movieDetails.summary ?: "",
)
)
}
}
}
return movieItemModelList
}
map
, but I am not sure this is correct way so please free to suggest new and improve versionfun filterMapMovieItemList(unfilteredList: List<MovieItem>): List<MovieItemModel> {
return unfilteredList.mapNotNull { data ->
data.movieDetails?.name?.let {
data.movieDetails
}
}.map { movieItem ->
val icon = movieItem.iconUrl ?: "xyz"
MovieItemModel(
name = movieItem.name ?: "",
icon = icon,
summary = movieItem.summary ?: ""
)
}
}
Luke
04/27/2023, 1:20 PMreturn unfilteredList.asSequence()
.mapNotNull { it.movieDetails }
.filterNot { it.name.isNullOrEmpty() }
.map { movieDetails ->
MovieItemModel(
movieDetails.name.orEmpty(),
movieDetails.iconUrl ?: "xyz",
movieDetails.summary.orEmpty(),
)
}
.toList()
KotlinLeaner
04/27/2023, 1:21 PMasSequence()
do? what are the benefits will get?franztesca
04/27/2023, 1:22 PMfun filterMovieItemList(unfilteredList: List<MovieItem>): List<MovieItemModel> =
unfilteredList.mapNotNull { it.movieDetails?.toMovieItemModelOrNull() }
fun MovieItemDetails.toMovieItemModelOrNull(): MovieItemModel? =
if (name.isNullOrEmpty()) {
null
} else {
MovieItemModel(
name,
iconUrl ?: "xyz",
summary ?: "",
)
}
Luke
04/27/2023, 1:23 PMList
in a Sequence
. It's not mandatory but the difference with List
is that, when chaining calls (.filter, .map, etc), you don't intanciate a new List
at each stepKotlinLeaner
04/27/2023, 1:27 PMList
to Sequence
. Does it will impact on performances?Luke
04/27/2023, 1:36 PMKotlinLeaner
04/27/2023, 1:37 PM.mapNotNull { it.movieDetails }
.filterNot { it.name.isNullOrEmpty() }
how does it work ?
.mapNotNull { it.movieDetails }
i.e. First it loop in all items that movieDetails
is not null and convert into Sequence
. Second
.filterNot { it.name.isNullOrEmpty() }
this will again go to whole list to find name
is not null
or empty
and create a sequence.iterator
it will do together?Luke
04/27/2023, 2:37 PMKotlinLeaner
04/27/2023, 2:43 PM