RxJava 发出具有不同周期的项目
RxJava emit items with different periods
我有一个 Hashmap
:
private HashMap<Integer, ArrayList<EmitedItem>> contentHashMap;
每个 EmitedItem 都是
public class EmitedItem {
public int duration;
public String title;}
而且我必须立即从每个 ArrayList 中获取第一个元素,然后在前一个持续时间之后获取第二个元素。
我不确定如何使用 RxJava
执行此操作
您可以为内部列表中的每个项目构建一个 Observable 列表,并应用不断增加的延迟:
Map<Integer, List<Item>> map = new HashMap<>();
map.put(1, Arrays.asList(Item.of(0, "A"), Item.of(1, "B"), Item.of(1, "C")));
map.put(2, Arrays.asList(Item.of(0, "D"), Item.of(1, "E")));
List<Observable<Item>> emitter = new ArrayList<>();
for (List<Item> list : map.values()) {
int time = 0;
for (Item i : list) {
time += i.duration;
emitter.add(Observable.just(i).delay(time, TimeUnit.SECONDS));
}
}
Observable.merge(emitter).map(v -> v.title)
.toBlocking()
.subscribe(System.out::println);
我有一个 Hashmap
:
private HashMap<Integer, ArrayList<EmitedItem>> contentHashMap;
每个 EmitedItem 都是
public class EmitedItem {
public int duration;
public String title;}
而且我必须立即从每个 ArrayList 中获取第一个元素,然后在前一个持续时间之后获取第二个元素。
我不确定如何使用 RxJava
您可以为内部列表中的每个项目构建一个 Observable 列表,并应用不断增加的延迟:
Map<Integer, List<Item>> map = new HashMap<>();
map.put(1, Arrays.asList(Item.of(0, "A"), Item.of(1, "B"), Item.of(1, "C")));
map.put(2, Arrays.asList(Item.of(0, "D"), Item.of(1, "E")));
List<Observable<Item>> emitter = new ArrayList<>();
for (List<Item> list : map.values()) {
int time = 0;
for (Item i : list) {
time += i.duration;
emitter.add(Observable.just(i).delay(time, TimeUnit.SECONDS));
}
}
Observable.merge(emitter).map(v -> v.title)
.toBlocking()
.subscribe(System.out::println);