ReactiveX Первый оператор с условием в rx-android

Я новичок в реактивеХ. Я включил rx-android в свой проект, добавив в файл модуля gradle следующие строки:

compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
compile 'io.reactivex.rxjava2:rxjava:2.1.7'

и теперь я пытаюсь начать использовать его. В качестве первой попытки я пытаюсь использовать reactiveX, чтобы проверить, содержат ли два списка хотя бы общий элемент. Я создал наблюдаемое из первого списка, а затем хочу проверить каждый элемент на соответствие списку элементов, содержащихся во втором списке. Я успешно реализовал операцию таким образом

public boolean hasAnyType(TYPE[] types){
    Observable<TYPE> o = Observable.fromArray(types);
    return !o.filter(type -> hasType(type)).isEmpty().blockingGet();
}

Но, если я правильно понял, оператор filter проверяет все элементы, сгенерированные наблюдаемым, а я просто хочу знать, найдено ли совпадение. Бесполезно перебирать все элементы, когда найдено совпадение. Я видел оператор first, который должен делать именно то, что мне нужно.

испускать только первый элемент (или первый элемент, отвечающий какому-либо условию), испускаемый Observable

Пытаюсь использовать его в своем Android-проекте, похоже, что условная версия оператора недоступна в библиотеке. Это правда? есть ли способ получить его в rx-android? Если нет, то какой будет правильный реактивный подход к проблеме?

Большое спасибо


person hara    schedule 12.12.2017    source источник
comment
пожалуйста, поместите свой наблюдаемый код, чтобы мы могли помочь вам реализовать оператор фильтра   -  person Fakher    schedule 12.12.2017
comment
Вы смотрели любой(предикат)?   -  person akarnokd    schedule 12.12.2017
comment
Значит, ваш наблюдаемый ничего не излучал и останавливался при первом излучении?   -  person nhoxbypass    schedule 12.12.2017


Ответы (1)


Спасибо @akarnokd! Оператор any работает отлично. Мой окончательный код

public boolean hasAnyType(TYPE[] types){
    Observable<TYPE> o = Observable.fromArray(types);
    return o.any(this::hasType).blockingGet();
}

Для полноты картины я протестировал свою предыдущую реализацию, и даже если предложенная akarnokd намного лучше, она работает так же. Тест повторяется до тех пор, пока не будет найден результат, после чего возвращается результат без проверки какого-либо другого элемента.

person hara    schedule 12.12.2017