#android #kotlin
#Android #kotlin
Вопрос:
Я должен создать новый список, объединенный с тремя другими списками, и использовать его в качестве подробного списка. Вот как это выглядит:
@Parcelize
data class Detail(
val photoId: Int, //Photo
val photoTitle: String, //Photo
val albumTitle: String, //Album
val username: String, //User
val email: String, //User
val phone: String, //User
val url: String. //Photo
) : Parcelable
Я назначил модель каждому свойству. Для свойства с именем PhotoID требуется поле идентификатора из фотографии, для photoTitle требуется заголовок из фотографии, для albumTitle требуется заголовок из альбома и так далее. Я знаю, как это сделать с помощью фильтра на основе двух списков, но понятия не имею, как это сделать с тремя списками.
Это мое предыдущее решение для двух списков:
if (albumsList.isNotEmpty() amp;amp; photosList.isNotEmpty()) {
//Merging the lists of RawAlbum and
val albumsById: Map<Int, RawAlbum> = albumsList.associateBy { it.id } // RawPhoto in the one ListItem list.
itemList = photosList.filter { albumsById[it.id] != null }.map { photosList ->
albumsById[photosList.id]?.let { albumsList ->
ListItem(albumsList.id, albumsList.title, photosList.title, photosList.thumbnailUrl)
}!!
}
Ответ №1:
Вы пытаетесь объединить все уникальные элементы из трех списков в один список? Вы можете попробовать оператор объединения стандартной библиотеки Kotlin.
Вероятно, сделайте что-то вроде ((list1 union list2) union list3)
Комментарии:
1. Спасибо за вашу идею, но я создал свое собственное решение. Спасибо.
Ответ №2:
Я нашел очень простой ответ на свой вопрос. Конечно, код нуждается в некоторых улучшениях сохранения, но работает. Мне не нужен новый список в этом решении, он сразу переходит к требуемой модели.
private fun setDetail(id: Int) {
if (albumsList.isNotEmpty() amp;amp; photosList.isNotEmpty() amp;amp; userList.isNotEmpty()) {
if (id != null) {
var photo = photosList[id]
var user = userList[id]
var album = albumsList[id]
var detail = Detail(photo.id, photo.title, user.username, album.title, user.email, user.phone, photo.url)
Timber.e(detail.toString())
onDetailsFragment(detail)
}
}
}