Author author = baseRealm.where(Author.class).equalTo("id", mId).findFirst();

public boolean checkGlobalSyncStatus(Author author, List<Books> mBooks) {

    final boolean[] isJobSynchronized = {false};

    Observable.fromIterable(mBooks)
            .filter(Books::isChanged)
            .doOnNext(book -> isJobSynchronized[0] = true)
            .just(author)
            .flatMapIterable(Author::getAllBooks)
            .filter(MyBook::isChanged)
            .doOnNext(mBook -> isJobSynchronized[0] = true)
            .just(author)
            .flatMapIterable(Author::getAllWriters)
            .filter(Writers::isChanged)
            .doOnNext(jobPage -> isJobSynchronized[0] = true)
            .subscribe();

    return isJobSynchronized[0];
}


问题

从静态引用fromIterable(mBooks)调用Observable,但从实例引用调用just(author)

我只想在单个查询中完成此操作。我可以为每个对象设置不同的可观察对象并执行所需的操作,但这将很长。

为什么?

这样,SonarQube给我失败的检查,并迫使我删除实例引用。

任何替代方案将不胜感激。



android - RxJava在单个订户中观察多个观察者-LMLPHP

最佳答案

这里没有理由使用RxJava,但是,运算符的正确组合如下:

Author author = baseRealm.where(Author.class).equalTo("id", mId).findFirst();

public boolean checkGlobalSyncStatus(Author author, List<Books> mBooks) {

    return Single.concat(
                Observable.fromIterable(mBooks)
                .any(Books::isChanged)
                , // ---------------------------------------------
                Observable.fromIterable(author.getAllBooks)
                .any(MyBook::isChanged)
                , // ---------------------------------------------
                Observable.fromIterable(author.getAllWriters)
                .any(Writers::isChanged)
           )
           .any(bool -> bool)
           .blockingGet();
}

10-06 14:14
查看更多