web-dev-qa-db-ja.com

rxjava 2でメソッドObservable.fromを解決できません

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);
                }
            })
14
s-hunter

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);
            }
        })
20
Pavan Kumar

.just()演算子を介してリストから直接Observableを作成できるため、fromIterable()を使用する必要はありません。

    Observable.fromIterable(ints)
7

少し遅いと思いますが、 RxJavaのドキュメントfrom演算子に関連するAPIの変更を人々に知らせたかっただけです。

fromfromArrayfromIterablefromFutureに明確化されました

5
cesards

リストが必要な場合は、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()));  
0
Shankha057