我试图按名称对几个模型实例进行分组,然后使用take(n)仅对每个组取某些项目,但是采用某种方式对GroupedObservable
无效。这是代码
假设其中包含一个包含10个项目的列表,其中5个具有名称“ 苹果”,其他5个具有名称“ 梨”
Observable<Item> items....
Observable<Item> groupedItems = items.groupBy(Item::name)
.flatMap(it -> it.take(2));
因此,我想 groupedItems 必须发出2个“苹果”和2个“豌豆”,但实际上却要全部发出。
有什么地方我做错了吗,我需要做些不同的事情吗?
答案 0 :(得分:1)
当再次遇到相同的密钥时,将重新创建已取消的组。您需要确保该组没有停止,并且您必须以某种方式忽略其他项:
source.groupBy(func)
.flatMap(group ->
group.publish(p -> p.take(5).mergeWith(p.ignoreElements()))
);