В основном у меня есть хранилище, которое возвращает мне Flowable>.Я хочу сохранить структуру списка (а не использовать flatMap для этой цели), потому что мне нужны эти элементы для RecyclerView и я хочу вычислить разницу между предыдущим списком и новым списком.Моя проблема в том, что FeedViewItem может иметь различное содержимое.Например, у FeedViewItem может быть установлен MessageViewChat, а другим переменным задано значение null, а другому FeedViewItem может быть присвоено значение MessageViewChat, равное нулю, а что-то другое - не равно нулю.Теперь некоторые из этих FeedViewItems (например, те, у которых MessageViewChat установлен в значение NULL) имеют вложенный Flowable.И, наконец, на мой вопрос: как мне удалить вложенный объект Flowable (например, внутри MessageViewChat), чтобы у меня был один объект Flowable, который называется, если называется любой из вложенных объектов Flowable.
Я знаю, что вопрос звучит такЯ должен использовать flatMap, но я не совсем понимаю, как.У меня есть список и некоторые элементы внутри этого списка, как мне использовать flowMable, как мне использовать flatMap / switchMap / zip или что-то подобное на таком устройстве?
class FeedViewItem {
var type: Int = TYPE_CONVERSATION
var feedViewChat: FeedViewChat? = null
...
}
class FeedViewChat {
var messages: Flowable<List<Message>>? = null
}
fun getFeedViewItems(): Flowable<MutableList<FeedViewItem>> {
return dataManager.feedRepository.getFeedItemsFlowable()
.map { FeedViewItem.convertToViewItems(it, dataManager) }
.map { currentFeedViewItems -> currentFeedViewItems.groupBy { it.section } }
.map {
it.toSortedMap(Comparator { o1, o2 ->
val sectionOneValue = when (o1) {
FeedItem.SECTION_NEW -> 1
FeedItem.SECTION_LATER -> 2
else -> 3
}
val sectionTwoValue = when (o2) {
FeedItem.SECTION_NEW -> 1
FeedItem.SECTION_LATER -> 2
else -> 3
}
sectionOneValue - sectionTwoValue
})
}
.map { currentFeedItemHashMap ->
val newFeedSections = mutableMapOf<String, List<FeedViewItem>>()
currentFeedItemHashMap.forEach { (key, value) ->
val headerText = when (key) {
FeedItem.SECTION_LATER -> {
"Later"
}
FeedItem.SECTION_HISTORY -> {
"History"
}
else -> {
null
}
}
if (headerText != null) {
val feedViewHeader = FeedViewHeader()
feedViewHeader.headerText = headerText
val feedViewItem = FeedViewItem()
feedViewItem.type = FeedViewItem.TYPE_HEADER
feedViewItem.feedViewHeader = feedViewHeader
feedViewItem.updatedAt = System.currentTimeMillis()
feedViewItem.id = headerText.hashCode().toLong()
val currentFeedViewItems = value.toMutableList()
currentFeedViewItems.add(0, feedViewItem)
newFeedSections[key] = currentFeedViewItems
} else {
newFeedSections[key] = value
}
}
newFeedSections
}.map {
it.values.flatten().toMutableList()
}.doOnEach {
val users: Flowable<List<User>> = dataManager.userRepository.getUsersFlowable()
val feedViewContactBar = FeedViewContactBar()
feedViewContactBar.users = users
val feedViewItem = FeedViewItem()
feedViewItem.type = FeedViewItem.TYPE_CONTACT_BAR
feedViewItem.feedViewContactBar = feedViewContactBar
feedViewItem.updatedAt = System.currentTimeMillis()
feedViewItem.id = FeedViewItem.VIEW_ID_CONTACT_BAR
it.value?.add(0, feedViewItem)
}
}
Последняя часть кода показывает, как я преобразуюмои текучие и в качестве последнего шага я должен был бы устранить этот вложенный Flowables.