Что я использую вместо Func1 при использовании RxJava2? - PullRequest
0 голосов
/ 12 июня 2019

Я использую PublishSubject с RxJava, и мой код выглядел следующим образом

 mPublishSubject = PublishSubject.create()
                .map(new Func1<String, List<String>>() {
                    @Override
                    public List<String> call(String s) {
                    return mRestClient.searchForCity(s);
                }
                })

                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread());

Как мне сделать то же самое при использовании RxJava2, я попытался использовать Function вместо Func1, но я получаю сообщение об ошибке - карту методов в классе Observable нельзя применять к данным типам.

Ответы [ 2 ]

0 голосов
/ 13 июня 2019

Вы можете создать java.util.Function через лямбда-синтаксис и заранее определить параметр типа PublishSubject, чтобы тип входного параметра вашей функции стал известен:

mPublishSubject = PublishSubject.<String>create()
   .map(s -> mRestClient.searchForCity(s))
   .subscribeOn(Schedulers.io())
   .observeOn(AndroidSchedulers.mainThread());
0 голосов
/ 12 июня 2019

Как говорят источники:

public final <R> Observable<R> map(Function<? super T, ? extends R> mapper) {
    ObjectHelper.requireNonNull(mapper, "mapper is null");
    return RxJavaPlugins.onAssembly(new ObservableMap<T, R>(this, mapper));
}

Итак, вам нужна функция! Или вы всегда можете использовать лямбда, как: s -> { return /*your data type*/; }

...