我正在练习 RX Java,想要获取与过滤器匹配的项目在数组中的位置。我看不到任何明显的方法来做到这一点。我正在考虑压缩范围和可迭代可观察之类的东西,但它很快就变得比 for 循环更加冗长和复杂。
过去有mapWithIndex
and zipWithIndex
RxJava 中的运算符,但它们已被删除,请参阅here https://groups.google.com/forum/#!topic/rxjava/y0KMO7ci0QE why.
所以你必须编写一些库样板一次:
class Indexed<T> {
final int index;
final T value;
public Indexed(T value, int index) {
this.index = index;
this.value = value;
}
@Override
public String toString() {
return index + ") " + value;
}
}
Iterable<Integer> naturals = IntStream.iterate(0, i -> i + 1)::iterator;
但是,你可以得到相当简洁的内容:
Observable<String> obs = Observable.just("zero", "one", "two", "three");
obs.zipWith(naturals, (s, i) -> new Indexed<String>(s, i))
.filter(e -> e.value.length() > 4)
.subscribe(System.out::println);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)