2016-06-07 4 views
2

. NET Reactive Extensions a une méthode soignée pour générer des séquences en utilisant corecursion qui est appelé Observable.Generate.Observable.Générer dans RxJava?

Existe-t-il une méthode analogue dans RxJava qui permette la génération de données par corecursion? Si non, pourrait-il être mis en œuvre en fonction des méthodes existantes?

Répondre

2

Ce n'est pas une correspondance exacte, mais nous avons SyncOnSubscribe (et AsyncOnSubscriber) qui peuvent générer des valeurs, par exemple:

@Test 
public void testRange() { 
    final int start = 1; 
    final int count = 4000; 
    OnSubscribe<Integer> os = SyncOnSubscribe.createStateful(new Func0<Integer>(){ 
     @Override 
     public Integer call() { 
      return start; 
     }}, 
     new Func2<Integer, Observer<? super Integer>, Integer>() { 
      @Override 
      public Integer call(Integer state, Observer<? super Integer> subscriber) { 
       subscriber.onNext(state); 
       if (state == count) { 
        subscriber.onCompleted(); 
       } 
       return state + 1; 
      } 
     }); 

    @SuppressWarnings("unchecked") 
    Observer<Object> o = mock(Observer.class); 
    InOrder inOrder = inOrder(o); 

    Observable.create(os).subscribe(o); 

    verify(o, never()).onError(any(TestException.class)); 
    inOrder.verify(o, times(count)).onNext(any(Integer.class)); 
    inOrder.verify(o).onCompleted(); 
    inOrder.verifyNoMoreInteractions(); 
}