public void filter(String query) {
   if (popularTags != null) {
     Observable.from(popularTags)
         .compose(BenihScheduler.pluck().applySchedulers(BenihScheduler.Type.NEW_THREAD))
         .filter(tag -> tag.getName().toLowerCase().contains(query.toLowerCase()))
         .map(
             tag -> {
               tag.setFollowed(DataBaseHelper.pluck().isFollowed(tag));
               return tag;
             })
         .toList()
         .subscribe(presenter::showFilteredTag, presenter::showError);
   }
 }
 public void loadPopularTags(int page) {
   presenter.showLoading();
   CodePolitanApi.pluck()
       .getApi()
       .getPopularTags(page)
       .compose(BenihScheduler.pluck().applySchedulers(BenihScheduler.Type.IO))
       .flatMap(articleListResponse -> Observable.from(articleListResponse.getResult()))
       .map(
           tag -> {
             tag.setFollowed(DataBaseHelper.pluck().isFollowed(tag));
             return tag;
           })
       .toList()
       .subscribe(
           tags -> {
             BenihWorker.pluck()
                 .doInNewThread(
                     () -> {
                       if (page == 1) {
                         popularTags = tags;
                       } else {
                         popularTags.addAll(tags);
                       }
                     })
                 .subscribe(
                     o -> {
                       if (presenter != null) {
                         presenter.showPopularTags(tags);
                       }
                     });
             if (presenter != null) {
               presenter.dismissLoading();
             }
           },
           throwable -> {
             if (presenter != null) {
               Timber.d(throwable.getMessage());
               presenter.showError(new Throwable(ErrorEvent.LOAD_POPULAR_TAGS));
               presenter.dismissLoading();
             }
           });
 }