代码之家  ›  专栏  ›  技术社区  ›  Amrmsmb

延迟和间隔运算符不能正常工作

  •  0
  • Amrmsmb  · 技术社区  · 7 年前

    如下所示,我正在创建 Observables 接线员。我希望代码能等5秒钟 System.out.println 从要打印的观察者。

    doOnNext doOnNext公司 即使在5秒之后。

    代码 :

    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
        .flatMap(p->Main.toObservable(p.get(0).getName()))
        .doOnNext(p-> System.out.println(p.length()) )
        .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("Sanna2", 59, "EGY"), new Person("Sanna3", 59, "EGY")),
                Arrays.asList(new Person("Mohamed1", 59, "EGY"), new Person("Mohamed2", 59, "EGY")),
                Arrays.asList(new Person("Ahmed1", 44, "QTR"), new Person("Ahmed2", 44, "QTR"), new Person("Ahmed3", 44, "QTR")),
                        Arrays.asList(new Person("Fatma", 29, "KSA")),
                        Arrays.asList(new Person("Lobna", 24, "EGY"))
                        );
    }
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   akarnokd    7 年前

    你必须在主方法中等待。放 Thread.sleep(10000) main() Observable 有机会跑。RxJava线程是守护进程线程,当应用程序线程脱离 主()

    public static void main(String[] args) {
    
        Observable.just("Hello World!", "Keep printing values!")
        .zipWith(Observable.interval(0, 5, TimeUnit.SECONDS), (a, b) -> a)
        .subscribe(v -> 
            System.out.println(Thread.currentThread() + ": " + v)
        );
    
        Thread.sleep(10000);  // <-----------------------------------
    
    }