Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rx java 重复操作,并在新的重复观察值中使用新值_Rx Java - Fatal编程技术网

Rx java 重复操作,并在新的重复观察值中使用新值

Rx java 重复操作,并在新的重复观察值中使用新值,rx-java,Rx Java,我正在从后端加载内容,我想要类似于分页的东西,但我不能使用.scan来增加“页面”,因为我实际上需要存储查询检索到的最后一个键,并且查询是在.scan之后运行的,所以我遇到了一个第22个难题 到目前为止,我的解决方案有点老套,因为我假设所有内容都在同一个线程中执行,然后我将所有内容包装在一个“Observable.Operator”类中,这样我就可以将所需的查询键存储在一个成员变量中(由于“lambda expression should effectively final”错误,所以无法将其存

我正在从后端加载内容,我想要类似于分页的东西,但我不能使用.scan来增加“页面”,因为我实际上需要存储查询检索到的最后一个键,并且查询是在.scan之后运行的,所以我遇到了一个第22个难题

到目前为止,我的解决方案有点老套,因为我假设所有内容都在同一个线程中执行,然后我将所有内容包装在一个“Observable.Operator”类中,这样我就可以将所需的查询键存储在一个成员变量中(由于“lambda expression should effectively final”错误,所以无法将其存储在局部变量中)


所以我的问题是:有没有人知道一个好方法,一旦你调用retry/repeat(这个变量在开始时是完全未知的),就把一个变量带到新的可观察链的开始

PublishSubject<Integer> subject = PublishSubject.create();
subject
        .flatMap(page -> Observable.just("stuff for page " + page))
        .subscribe(stuff -> {
            System.out.println("Got stuff = " + stuff);
        });

subject.onNext(1);
subject.onNext(2);
PublishSubject=PublishSubject.create();
主题
.flatMap(页面->可观察的.just(“页面内容”+页面))
.订阅(资料->{
System.out.println(“Got stuff=“+stuff”);
});
主题.onNext(1);
主题.onNext(2);
这可能会给你一些想法(不知道你到底想要什么):

final-AtomicReference initialValue=new-AtomicReference();
最终T defaultInitialValue=。。。;
可观察。延迟(()->{
if(initialValue.get()==null)
source.scan(默认初始值,累加器);
其他的
scan(initialValue.get(),累加器);
})
.doOnNext(x->initialValue.set(x))
.重试()
.认购(……);
final AtomicReference<T> initialValue = new AtomicReference<T>();
final T defaultInitialValue = ...;
Observable.defer(() -> {
    if (initialValue.get() == null) 
        source.scan(defaultInitialValue, accumulator);
    else 
        source.scan(initialValue.get(), accumulator);
  })
  .doOnNext(x -> initialValue.set(x))
  .retry()
  .subscribe(...);