使用rxjava订阅时如何返回布尔值

时间:2019-07-21 17:30:16

标签: java android rx-java

我有一个arrayList。如果我的数组isNumber中至少有一项,则需要返回true。 这是我的代码:

    private boolean hasNumber(ArrayList<Item> items) {
          return Observable.fromIterable(items)
               .filter(Item::isNumber)                
                .toList()
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .map(items-> items.size() > 0)
                .subscribe(result -> "");
   }

但是我不能从该方法返回true / false。我不明白如何使用rxJava返回值。请帮助我。

2 个答案:

答案 0 :(得分:1)

一种骇人听闻的方法是:

  private boolean hasNumber(List<Item> items) {
    Boolean[] res = new Boolean[1];
    res[0] = false;
    Observable.from(items).filter(this::isNumber).toList().subscribe(list -> {
        if(list.size() > 0) {
          res[0] = true;
        }
    });
    return res[0];
  }

答案 1 :(得分:0)

尝试blockingFirst

private boolean hasNumber(ArrayList<Item> items) {
    return Observable.fromIterable(items)
        .filter(Item::isNumber)                
        .toList()
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .map(items-> items.size() > 0)
        .blockingFirst();
}