Я realtive новичок в RxJava, так что я изо всех сил делать такого рода вещи, вещьСоздание Наблюдаемые из списка в зависимости от условий
У меня есть один Observable, испускающий отображение списка из другого класса под названием Gatekeeper как это:
List<ParkappGate> actualgates = Observable.just(gates).concatMap(new Func1<List<Gatekeeper>, Observable<? extends List<ParkappGate>>>() {
@Override
public Observable<? extends List<ParkappGate>> call(List<Gatekeeper> gatekeepers) {
final List<ParkappGate> gates = new ArrayList<ParkappGate>();
for (Gatekeeper gate :
gatekeepers) {
mDataManager.getGateById(gate.getCode()).subscribe(new Subscriber<ParkappGate>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(ParkappGate gate) {
gates.add(gate);
}
});
}
return Observable.just(gates);
}
});
Это работает нормально, так что теперь я хочу, чтобы создать Observable, который излучает только первый элемент, который действует из списка, приведенного некоторые условия, то, что я создал здесь есть что-то вроде этого:
Observable<ParkappGate> nearestValidGate = actualgates.
concatMap(new Func1<List<ParkappGate>, Observable<? extends ParkappGate>>() {
@Override
public Observable<? extends ParkappGate> call(List<ParkappGate> parkappGates) {
for (ParkappGate gate :
parkappGates) {
if (isValidGate(gate))
return Observable.just(gate);
}
return null;
}
}
Моя проблема возникает при проверке ParkappGate. Мне нужно вызвать один метод, который я создал, который возвращает Observable<ParkappParking>
, а другой, который возвращает Observable, и оценивает их с помощью ParkappGate, переданного как параметр, а затем возвращает, если все условия верны или не от метода isValidGate(ParkappGate gate)
Один простой подход, который я видел, был преобразования Observable<ParkappParking>
и Observable<Boolean>
до значений с использованием toBlocking.first()
, но это не кажется, правильный подход к реактивному X, так что я хотел бы знать, как сделать это правильно ,
http://stackoverflow.com/a/38212879/2450152 Это именно то, что вы хотите сделать. Использовать фильтры и методы карты –