private void initSearchSubject(SearchView searchView) { ReplaySubject<String> searchQuerySubject; mSearchDisposable = (searchQuerySubject = ReplaySubject.create()) .debounce(400, TimeUnit.MILLISECONDS) .map(title -> loadMoreForSearch(title, new PaginationArgs())) .map(this::addFirstFoundedItemsToList) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(aBoolean -> mEntitiesListFragment.updateRecyclerView(), throwable -> Logger.e(throwable, "Something really strange happened with search!")); searchView.setOnQueryTextListener(new SearchViewOnQueryTextListener(searchQuerySubject)); }