如何在rxjava中使用toMap()获取索引

如何在rxjava中使用toMap()获取索引,java,rx-java,Java,Rx Java,我想将列表更改为列表,然后映射为映射。 关键是“img”+索引,我怎么做 例如: 从清单[“a”、“b”、“c”] 映射{“img1”:“a”,“img2”:“b”,“img3”:“c”} Observable.from((位图[])bitmapList.toArray()) .subscribeOn(Schedulers.io()) .map(新函数1(){ @凌驾 公共字符串调用(位图){ 返回剂量测量(位图); } }) .toMap(新功能1(){ @凌驾 公共字符串调用(字符串s){

我想将列表更改为列表,然后映射为映射。 关键是“img”+索引,我怎么做

例如: 从清单[“a”、“b”、“c”] 映射{“img1”:“a”,“img2”:“b”,“img3”:“c”}

Observable.from((位图[])bitmapList.toArray())
.subscribeOn(Schedulers.io())
.map(新函数1(){
@凌驾
公共字符串调用(位图){
返回剂量测量(位图);
}
})
.toMap(新功能1(){
@凌驾
公共字符串调用(字符串s){
返回“img”;//如何获取索引
}
})
...;

为了将值与索引相结合,您需要一些内部状态:您需要跟踪流中的计数器。您可以与操作员一起执行此操作。因为您需要跟踪计数器和实际值,所以我们首先需要引入一个简单的类,它可以保存两个值:

private static class Tuple<T, S> {

    final T first;
    final S second;

    Tuple(T k, S v) {
        this.first = k;
        this.second = v;
    }
}

请注意,
scan
skip
的组合实际上是一个
zipWithIndex
,例如在RxScala中被称为。Java语言中没有元组,因此您无法直接执行此操作,但您必须创建自己的
Tuple
类才能使其工作。

请具体说明您的问题。例如,您可以在发布的代码中询问错误或其他问题。我想知道toMap()函数中的列表索引。zipWith(Observable.range(0,length),…)绑定Tuple可能比sacn()更好?当然,这是针对这种特定情况的完美解决方案。但是,这对任何可观察的
事件(比如包含鼠标移动)都不起作用,因为您不知道
onNext
事件何时到来,也不知道会有多少。我假设您的源只是一个虚拟源,并且您希望它用于任何长度无法立即知道的任意流。也许这是一个解决方案,但我想找到一个没有元组的答案。谢谢~对您的最终解决方案感到好奇!我是rxjava的初学者,因此我将学习更多关于rxjava的知识,也许会找到更好的解决方案。^ u^(当前解决方案:使用带元组的zipWith)
private static class Tuple<T, S> {

    final T first;
    final S second;

    Tuple(T k, S v) {
        this.first = k;
        this.second = v;
    }
}
public static void main(String[] args) {
    Observable.from(Arrays.asList("a", "b", "c"))
            .scan(new Tuple<>("", 0), (tuple, s) -> new Tuple<>(s, tuple.second + 1))
            .skip(1)
            .toMap(tuple -> "img" + tuple.second, tuple -> tuple.first)
            .subscribe(System.out::println);
}