1

As shown below, I am learning how to use rxjava. I want to know how to use foreach with observables. the problem is, when i use forEach i receive compilation error:

add cast to method receiver

please let me know how to use forEach correctly.

thanks in advance

code:

public static void main(String[] args) {
    Observable<List<Person>> observables = Observable.create(e-> {
        for(List<Person> p : Main.getPersons()) {
            e.onNext(p);
        }
        e.onComplete();
    });
     observables
    //.subscribeOn(Schedulers.newThread())//newThread
    .forEach(p->p.size())   
    .map(p->p+"..STRING")
    //.delay(5, TimeUnit.SECONDS)
    //.interval(0, 5, TimeUnit.SECONDS)
    .observeOn(Schedulers.io())
    .subscribe(new Observer() {
        @Override
        public void onComplete() {
            // TODO Auto-generated method stub
            System.out.println("onCompleted");
        }

        @Override
        public void onError(Throwable arg0) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onNext(Object arg0) {
            // TODO Auto-generated method stub
            System.out.println("onNextFromObserver: " + arg0);
        }

        @Override
        public void onSubscribe(Disposable arg0) {
            // TODO Auto-generated method stub
        }
    });
}

private static <T> Observable<T> toObservable(T s) {
    return Observable.just(s);
}
private static List<List<Person>> getPersons() {
    return Arrays.asList(
            Arrays.asList(new Person("Sanna1", 59, "EGY"), new Person(null, 59, "EGY"), new Person("Sanna3", 59, null)),
            Arrays.asList(new Person("Mohamed1", 59, "EGY"), new Person(null, 59, "EGY")),
            Arrays.asList(new Person("Ahmed1", 44, "QTR"), new Person("Ahmed2", 44, "QTR"), new Person(null, null, "QTR")),
                    Arrays.asList(new Person("Fatma", 29, "KSA")),
                    Arrays.asList(new Person("Lobna", 24, "EGY")));
}
}
Amrmsmb
  • 1
  • 27
  • 104
  • 226
  • 2
    `forEach` is a terminal operator, which means you leave the `Observable` and can't apply further `Observable` operators. What are you trying to achieve? – akarnokd Nov 02 '18 at 18:54
  • @akarnokd i would to display how many objects of type person in each list using for each... – Amrmsmb Nov 02 '18 at 19:15
  • Display where? You managed to print other stuff out, why not apply `doOnNext(p ->System.out.println(p.size()))`? – akarnokd Nov 02 '18 at 20:26
  • @akarnokd i just want to know how should i use forEach with Observables...can you help me to apply using forEach in my example? – Amrmsmb Nov 02 '18 at 20:34
  • I still don't understand for what purpose you want to apply a terminal operator. `forEach` is practically the same as `subscribe`. – akarnokd Nov 02 '18 at 20:37

0 Answers0