【发布时间】:2019-06-02 22:30:56
【问题描述】:
我正在尝试使用这样的作者 ID 键获取消息映射:
Map<Long, Collection<Message>>
这是我尝试过的:
messageViewModel.getAll()
.flatMap(Flowable::fromIterable)
.toMultimap(Message::getAuthorId)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(this::onSuccess);
private void onSuccess(Map<Long, Collection<Message>> longCollectionMap) {
Collection<Message> messages = longCollectionMap.get(0);
}
方法 messageViewModel.getAll() 返回:
Flowable<List<Message>>
然后我将它转换为 Flowable 流(Flowable::fromIterable),这样它就可以一次发出一个项目而不是整个列表,然后我使用“toMultiMap”进行映射
永远不会调用onSuccess方法,不知道这里出了什么问题。如果我不使用 toMultiMap (并对代码进行相应的修改)它可以工作,那么问题一定是 toMultiMap 方法。
但是当我尝试这个时:
List<String> list = Arrays.asList("1", "2", "3");
Flowable.fromIterable(list)
.toMultimap(String::length)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(this::onSuccess);
private void onSuccess(Map<Integer,Collection<String>> integerCollectionMap) {
Collection<String> strings = integerCollectionMap.get(1);
}
这行得通!唯一的区别是这个不调用房间数据库来获取可迭代的项目。
文档还说:
请注意,此运算符需要上游发送信号 {@code onComplete} 才能发出累积的地图。
这让我很困惑。由于 Flowable 类没有以 onComplete 作为参数的 subscribe 方法,并且它没有用于我上面展示的第二种情况,但它可以工作。
请帮帮我,这快把我逼疯了。
【问题讨论】:
标签: android rx-java2 android-room