在rxjava 1中的Observable类中有一个from方法但在rxjava中找不到2.如何在以下代码中替换rxjava 2中的from方法:
List<Integer> ints = new ArrayList<>();
for (int i=1; i<10; i++) {
ints.add(new Integer(i));
}
Observable.just(ints)
.flatMap(new Function<List<Integer>, Observable<Integer>>() {
@Override
public Observable<Integer> apply(List<Integer> ints) {
return Observable.from(ints);
}
})
答案 0 :(得分:18)
您可以使用Observable.fromIterable(source)
某些运算符重载已使用后缀重命名,例如 fromArray,fromIterable等。这个的原因是当 库是用Java 8编译的,javac经常无法消除歧义 功能接口类型之间。
List<Integer> ints = new ArrayList<>();
for (int i=1; i<10; i++) {
ints.add(new Integer(i));
}
Observable.just(ints)
.flatMap(new Function<List<Integer>, Observable<Integer>>() {
@Override
public Observable<Integer> apply(List<Integer> ints) {
return Observable.fromIterable(ints);
}
})
答案 1 :(得分:6)
您无需使用.just()
,因为您可以通过Observable
运营商直接在列表中创建fromIterable()
。
Observable.fromIterable(ints)
答案 2 :(得分:4)
我想这有点晚了,但我只是想让人们知道,API更改与RxJava documentation中的from
运算符相关:
from
消除歧义为fromArray
,fromIterable
,fromFuture
答案 3 :(得分:0)
如果需要列表,则可以简单地使用Java Stream
并从中创建一个List
,然后将其直接传递给Observable.fromIterable
方法。像这样:
Observable.fromIterable(IntStream.rangeClosed(lowerLimitInclusive,upperLimitInclusive)
.boxed()
.collect(Collectors.toList()));
或
Observable.fromIterable(Stream.iterate(lowerLimitInclusive, integer -> integer + 1)
.filter(integer -> integer < (upperLimit+1))
.limit((long(upperLimit+1)-long(lowerLimitInclusive))
.collect(Collectors.toList()));