2015-06-13 13 views
19

Dostaję taki sam efekt przy użyciu Observable.just vs Observable.from w następującym przypadku:RxJava - Just vs Od

public void myfunc() { 
//swap out just for from here and i get the same results,why ? 
     Observable.just(1,2,3).subscribe(new Subscriber<Integer>() { 
      @Override 
      public void onCompleted() { 
       Log.d("","all done. oncompleted called"); 
      } 

      @Override 
      public void onError(Throwable e) { 

      } 

      @Override 
      public void onNext(Integer integer) { 
       Log.d("","here is my integer:"+integer.intValue()); 
      } 
     }); 

    } 

myślałem właśnie został 'tylko' rzekomo emitują pojedynczy element i "od" miało emitować przedmioty na jakiejś liście. Co za różnica ? Zauważyłem również, że "tylko" i "od" przyjmuje tylko ograniczoną liczbę argumentów. więc Observable.just (1,2,3,4,5,6,7,8, -1, -2) jest w porządku, ale Observable.just (1,2,3,4,5,6,7,8, -1, -2, -3) zawodzi. Tak samo jest z, muszę zawinąć go na liście lub tablicy rodzajów. Jestem tylko ciekawy, dlaczego nie potrafią zdefiniować nieograniczonej liczby argumentów.

UPDATE: Eksperymentowałem i zobaczyłem, że "just" nie przyjmuje struktury tablicowej, "po prostu" przyjmuje argumenty. "z" zabiera kolekcję. więc następujące działa dla "z", ale nie dla "tylko":

public Observable myfunc() { 

    Integer[] myints = {1,2,3,4,5,6,7,8,-1,-2,9,10,11,12,13,14,15}; 
    return Observable.just(myints).flatMap(new Func1<Integer, Observable<Boolean>>() { 
     @Override 
     public Observable<Boolean> call(final Integer integer) { 
      return Observable.create(new Observable.OnSubscribe<Boolean>() { 
       @Override 
       public void call(Subscriber<? super Boolean> subscriber) { 
        if(integer.intValue()>2){ 
         subscriber.onNext(integer.intValue()>2); 

        } 
       } 
      }); 
     } 
    }); 

} 

Zakładam, że to jest wyraźna różnica, prawda?

Odpowiedz

46

Różnica powinny być bardziej wyraźne, gdy patrzy się na zachowanie każdego kiedy przechodzą to jest Iterable (na przykład List):

Observable.just(someList) daje 1 Emisja - List.

Observable.from(someList) da N emisji - każdy element na liście.

Możliwość przekazywania wielu wartości do just jest udogodnieniem dla wygody; poniższe są funkcjonalnie takie same:

Observable.just(1, 2, 3); 
Observable.from(1, 2, 3); 
+7

Pomogło to zakończyć około 45 minut zamieszania. Dzięki! – Josh