Articles of rx java

如何链接多个RxJava的groupBy()方法,例如groupBy()。groupBy()

给定输入: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 将数字分组为奇数或偶数,然后小于或大于5。 预期产量: [[1, 3, 5], [2, 4], [6, 8, 10], [7, 9]] 输出的顺序不受限制。 我现在使用以下方法: Observable.range(1, 10) .groupBy(n -> n % 2 == 0) .flatMap((GroupedObservable g) -> { return Observable.just(g).flatMap(ObservableUtils.flatGroup()).groupBy(n -> n > 5); }) .subscribe((final GroupedObservable g) -> { Observable.just(g).flatMap(ObservableUtils.flatGroup()).forEach(n -> println(g + “: […]

使用RxJava和Retrofit进行N次连续api调用

我有一个文件列表,我想从Android设备上传到后端。 由于内存限制,我想在第一次完成之后进行第二次API调用,在第二次完成之后进行第三次API调用,依此类推。 我写了类似的东西 private Observable uploadFiles(List files) { return Observable.create(subscriber -> { for (int i = 0, size = files.size(); i < size; i++) { UploadModel uploadModel = new UploadModel(files.get(0)); int uploadResult = retrofitApi.uploadSynchronously(uploadModel); subscriber.onNext(uploadResult); } subscriber.onCompleted(); }).subscribeOn(Schedulers.newThread()); } 但是我觉得这可能违背了Rx的精神,而且说的是如果你使用Observable.create,你可能做错了……这是一种合理的方法吗? 使用Retrofit的RxJava集成有没有更好的方法来实现这一目标?

如何在java中去除改进的反应请求?

我正在开发一个android项目,通过使用Rx-Java observable和subscribe进行改造来发出请求。 但是,在某些交互中,可以多次调用此请求,我只想在预定义的时间窗口(debounce)中执行最后一个请求。 我试图将debounce运算符直接应用于observable,但它不起作用,因为每次发生某些交互时都会执行以下代码: mApi.getOnlineUsers() .debounce(1, TimeUnit.SECONDS) .subscribe(…) 我想它应该只创建一个observable,每次交互都应该将执行“追加”到同一个observable。 但我对Rx Java有点新意,并不知道该怎么做。 谢谢!

在RxJava中处理Completable,Single,Maybe和终止Observable的最佳实践

我从Android的角度来问这个问题,但这应该适用于RxJava。 作为一种最佳实践,我的视图是否应该处理即使是短暂的Completable , Single , Maybe和终止Observable Rxtypes,这些types应该在短时间内终止,但在用户关闭视图时仍然可以执行? 我知道当Rx链终止时,它会被丢弃,但这可能会在视图关闭后的某个时候发生。 例如,正在执行HTTP GET的Single 。 调用将完成,但可能是在视图被破坏后,暂时阻止垃圾回收。 如果使用CompositeDisposable在长期视图中收集此类Disposable ,我认为应该注意clear()或以其他方式定期删除这些Disposable ,以防止CompositeDisposable的大小无限增长?

如果以RxJava Observable的forms提供,Kotlin密封类子类需要转换为基类

我试图在我用Kotlin编写的应用程序中避免RxJava链的终端状态,所以我发现将Observable转换为Observable<Result>是正确的,其中Result是密封类。 sealed class Result data class Success(val data: T) : Result() data class Failure(val throwable: Throwable) : Result() 让我们说我有这个网络请求是可观察的。 fun getOrganization(): Observable<Result> { return api.getOrganization(“google”) .map { Success(true) } .onErrorReturn { Failure(RuntimeException(“throwable”)) } } 所以我最终要做的就是处理这样的结果。 fun main(args: Array) { getOrganization().subscribe({ when (it) { is Success -> print(“success = ${it.data}”) is Failure -> print(“failure = ${it.throwable}”) […]

RxJava:如何在不破坏链条的情况下有条件地将操作符应用于Observable

我在RxJava observable上有一系列运算符。 我希望能够根据布尔值应用两个运算符中的一个,而不会“破坏链”。 我对Rx(Java)比较陌生,我觉得这可能比我目前引入临时variables的方法更具惯用性和可读性。 这是一个具体的例子,如果批量大小字段为非空,则从observable缓冲项,否则使用toList()发出单批无限大小: Observable source = Observable.from(newItems); Observable<List> batchedSource = batchSize == null ? source.toList() : source.buffer(batchSize); return batchedSource.flatMap(…).map(…) 这样的事情可能吗? (伪lambda因为Java): Observable.from(newItems) .applyIf(batchSize == null, { o.toList() }, { o.buffer(batchSize) }) .flatMap(…).map(…)

什么是RxJava相当于orElse

在其他语言的流/function域中有一个常见的操作,即orElse()。 它就像一个if,当当前链没有得到任何结果时,它变为备用链。 在使用Maybetypes的语言中,它基本上会继续使用某种types的链,或者在Nonetypes上更改为orElse。 理想情况: Observable.just(false) .filter(value -> { return value; }) .map(value -> { return 1; }) .orElse(Observable.just(0)); Observable.error(new IllegalStateException(“Just playing”)) .filter(value -> { return value; }) .map(value -> { return 1; }) .orElse(Observable.just(0)); 它目前可以使用concat和takeFirst进行复制,但它在语义上并不相同,并且不能正确地处理error handling。 Observable.concat(Observable.just(false) .filter(value -> { return value; }) .map(value -> { return 1; }), Observable.just(0)) .takeFirst();

取消订阅RxJava中的rx.Single

在我的代码库中有几种情况,我订阅的流只会发出一个结果,因此使用rx.Single而不是rx.Observable 。 Single的文档说明如下: Single将只调用其中一种方法,并且只调用一次。 在调用任一方法时,Single终止并且对它的订阅结束。 使用传统的Observable我捕获对Subscription的引用,以便我可以在适当的时候取消订阅并且不会导致内存泄漏: Subscription s = getObservable().subscribe(…); subscriptions.add(s); subscriptions.clear(); 我的问题是,对于Single是否有必要,或者由于订阅立即结束,它可以简单地保留为: getSingle.subscribe(…); 没有对引用进入订户的任何负面影响。

如何使用RxJava-Android等待多个嵌套的异步调用?

我是RxJava的新手,这是我的情况, 发送请求A并将返回List 对于每个A,发送请求AA并将AA返回,然后绑定A和AA B&BB有类似的逻辑 在所有请求完成后才执行某些操作 例: request(url1, callback(List listA) { for (A a : listA) { request(url2, callback(AA aa) { a.set(aa); } } } A和B是独立的 如何构造代码? 我还使用Retrofit作为网络客户端。

RxJava组合请求序列

问题 我有两个Apis。 Api 1给了我一个项目列表,Api 2给了我更多关于我从Api获得的每个项目的详细信息。到目前为止,我解决它的方式导致了糟糕的性能。 问题 在Retrofit和RxJava的帮助下,快速,快速地解决了这个问题。 我的方法 在片刻我的解决方案看起来像这样: 步骤1:Retrofit从Api 1执行Single<ArrayList> 。 第2步:我遍历这些项目并向Api 2发出请求。 步骤3:改进返回按顺序执行每个项目的Single 步骤4:在完成Api 2的所有调用完成后,我为包含信息和扩展信息的所有项创建一个新对象。 我的代码 public void addExtendedInformations(final Information[] informations) { final ArrayList informationDetailArrayList = new ArrayList(); final JSONRequestRatingHelper.RatingRequestListener ratingRequestListener = new JSONRequestRatingHelper.RatingRequestListener() { @Override public void onDownloadFinished(Information baseInformation, ExtendedInformation extendedInformation) { informationDetailArrayList.add(new InformationDetail(baseInformation, extendedInformation)); if (informationDetailArrayList.size() >= informations.length){ listener.onAllExtendedInformationLoadedAndCombined(informationDetailArrayList); } } […]