无法在rxjava 2中解析方法Observable.from

时间:2017-01-12 05:15:38

标签: rx-java rx-java2

在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);
                }
            })

4 个答案:

答案 0 :(得分:18)

您可以使用Observable.fromIterable(source)

来自documentation

  

某些运算符重载已使用后缀重命名,例如   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消除歧义为fromArrayfromIterablefromFuture

答案 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()));