RxJava发出不同时期的项目

时间:2016-05-31 07:02:21

标签: java android rx-java period

我有 private HashMap<Integer, ArrayList<EmitedItem>> contentHashMap;

public class EmitedItem {
public int duration;
public String title;}

每个EmitedItem都是

RxJava

我必须立即从每个ArrayList获取第一个元素,然后在前一个持续时间之后获得第二个元素。 我不确定如何使用 private void play(int index) { mediaPlayer.release(); index++; String s = "mp3/a" + index + ".mp3"; AssetFileDescriptor afd; try { afd = getAssets().openFd(s); mediaPlayer = new MediaPlayer(); mediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength()); mediaPlayer.prepare(); mediaPlayer.start(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }

执行此操作

1 个答案:

答案 0 :(得分:2)

您可以为内部列表中的每个项目构建一个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);