2015-06-13 17 views
19

sto ottenendo lo stesso risultato quando si utilizza Observable.just vs Observable.from nel seguente caso:RxJava - Proprio vs Da

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()); 
      } 
     }); 

    } 

ho pensato appena è stato 'solo' Immagino di emettere un singolo elemento e 'from' doveva emettere elementi in una sorta di lista. Qual è la differenza ? Ho anche notato che 'solo' e 'da' richiede solo un numero limitato di argomenti. così Osservabile. (1,2,3,4,5,6,7,8, -1, -2) è ok ma Osservabile. (1,2,3,4,5,6,7,8, -1, -2, -3) non riesce. Lo stesso vale per, devo avvolgerlo in una lista o in una serie di generi. Sono solo curioso di sapere perché non possono definire argomenti illimitati.

AGGIORNAMENTO: Ho sperimentato e ho visto che "solo" non ha una struttura di array, ma "solo" accetta argomenti. 'from' prende una collezione. quindi le seguenti opere per 'da', ma non per 'solo':

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); 

        } 
       } 
      }); 
     } 
    }); 

} 

Io parto dal presupposto che questa sia la differenza chiaro, allora, giusto?

risposta

46

La differenza dovrebbe essere più chiaro quando si guarda il comportamento di ciascuno quando si passa un Iterable (per esempio un List):

Observable.just(someList) vi darà 1 Emissione - un List.

Observable.from(someList) ti darà N emissioni: ogni articolo nell'elenco.

La possibilità di passare più valori a just è una comodità; il seguente è funzionalmente lo stesso:

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

Questo ha aiutato a terminare circa 45 minuti di confusione. Grazie! – Josh