I zostały poszukiwania prosta odpowiedź na temat korzystania operator pocztowy, a co zrobić z obserwabli Tworzę, aby przekazać je do niego, zastanawiałem się, czy powinienem zadzwonić subskrybować() dla każdego obserwowalne, czy nie, nie z tych odpowiedzi były łatwe do znalezienia, musiałem zrozumieć to przez siebie, więc tutaj jest prosty przykład dla za pomocą operatora Zip na 2 obiektach Observables:
@Test
public void zipOperator() throws Exception {
List<Integer> indexes = Arrays.asList(0, 1, 2, 3, 4);
List<String> letters = Arrays.asList("a", "b", "c", "d", "e");
Observable<Integer> indexesObservable = Observable.fromIterable(indexes);
Observable<String> lettersObservable = Observable.fromIterable(letters);
Observable.zip(indexesObservable, lettersObservable, mergeEmittedItems())
.subscribe(printMergedItems());
}
@NonNull
private BiFunction<Integer, String, String> mergeEmittedItems() {
return new BiFunction<Integer, String, String>() {
@Override
public String apply(Integer index, String letter) throws Exception {
return "[" + index + "] " + letter;
}
};
}
@NonNull
private Consumer<String> printMergedItems() {
return new Consumer<String>() {
@Override
public void accept(String s) throws Exception {
System.out.println(s);
}
};
}
wydrukowany wynik to:
[0] a
[1] b
[2] c
[3] d
[4] e
ostateczne odpowiedzi na pytania, które gdzie w mojej głowie były następujące
obserwable przekazanych do zip() metoda wystarczy być utworzone tylko, nie muszą mieć żadnych subskrybentów do nich, wystarczy tylko je utworzyć ... jeśli chcesz, aby jakiekolwiek obserwowalne do uruchomienia w harmonogramie, możesz określić to dla tego Observable ... próbowałem również zip() operator na Observables, gdzie powinien czekać na wynik, a materiał eksploatacyjny zip() był t jest ustawiony tylko wtedy, gdy oba wyniki są gotowe (co jest oczekiwanym zachowaniem).
Problem, który napotykam, polega na tym, że mam pogląd, że odpalam zadania obserwowalnego wideo, a inny, który pozwala obserwować obraz, i jeszcze jeden, który powinien wziąć oba te wyniki i wykorzystać je do ostatecznego obserwowalnego. Czy zip zwróci mi wyniki obserwowalnych już wykonanych? – feilong
Nie sądzę, że można wykonać obserwowalne, ale myślę, że rozumiem twój punkt widzenia. Obserwowalny nie będzie działać, dopóki nie zostanie przyłączony do niego abonent. Więc cały obserwowalny układ musi zostać zrobiony przed przyłączeniem subskrybenta. – inmyth
Zgadzam się z twoim punktem, że "operator zip pozwala ci skomponować wynik z wyników dwóch różnych obserwowalnych". Teraz chcę, aby obserwowalne 2 było zależne od obserwowalnego 1, więc obserwowalne 1 powinno zostać wykonane przed obserwowalnym 2, a następnie muszę połączyć wynik obydwu obserwowalnych. Czy mamy do tego jakiegokolwiek operatora? Zip może wykonać tę pracę. Nie chcę używać flatMap, ponieważ konwertuje jeden strumień do drugiego, ale tutaj potrzebuję ustawić zależność, a następnie skompresować wynik. Proszę odpowiedz. –