package in.mvpstarter.sample.data; import java.util.ArrayList; import java.util.List; import javax.inject.Inject; import javax.inject.Singleton; import in.mvpstarter.sample.data.model.NamedResource; import in.mvpstarter.sample.data.model.Pokemon; import in.mvpstarter.sample.data.model.PokemonListResponse; import in.mvpstarter.sample.data.remote.MvpStarterService; import io.reactivex.Single; import io.reactivex.functions.Function; @Singleton public class DataManager { private final MvpStarterService mMvpStarterService; @Inject DataManager(MvpStarterService mvpStarterService) { mMvpStarterService = mvpStarterService; } public Single<List<String>> getPokemonList(int limit) { return mMvpStarterService.getPokemonList(limit) .flatMap(new Function<PokemonListResponse, Single<List<String>>>() { @Override public Single<List<String>> apply(PokemonListResponse pokemonListResponse) { List<String> pokemonNames = new ArrayList<>(); for (NamedResource pokemon : pokemonListResponse.results) { pokemonNames.add(pokemon.name); } return Single.just(pokemonNames); } }); } public Single<Pokemon> getPokemon(String name) { return mMvpStarterService.getPokemon(name); } }