我有Rx Stream,我使用分组的observable根据判别值有多个observable。问题是我想在内存中保留每个组可观察的最后一个订阅,以便在创建新流时删除流(取消订阅)
我正在使用一个简单的Hashmap来根据一个可以自我观察的键来存储值,但它不值得。
这是我到目前为止的地方:
stream
.groupBy(ts -> ts.getLogin())
.map(receptor -> receptor.asObservable())
.forEach(consumer -> {
controlConsumer(consumer);
});
public void controlConsumer(Observable<Number> pConsumer) {
Subscription mySubscription = pConsumer
.buffer(2,1)
.subscribe();
// Remove the current consumer last subscription if existing
if(consumersLastSubcriptions.containsKey(pConsumer)) {
LOG.info("removing last subscription");
Subscription lLastSubscription = consumersLastSubcriptions.get(pConsumer);
lLastSubscription.unsubscribe();
}
// store the new consumer subscription
consumersLastSubcriptions.put(pConsumer, lSubscription);
}
更新
实际上,我可能会有发出它们的用户登录定义的不同项目。我想要的是存储每个用户的最后一个订阅,以便在需要时重新创建一个新用户时将其删除。我的目的是关闭不再使用的每个流,不要让它们一无所获。