RxJava方法转换为RxJava 3

huangapple 未分类评论49阅读模式
英文:

RxJava method conversion to RxJava3

问题

以下是您要求的翻译内容:

这是一个使用 RxJava 编写的方法。

public Observable<String> method() {
    return model.getOffers()
            .filter(new Function<Offers, Boolean>() {
                @Override
                public Boolean apply(Offers offers) throws Throwable {
                    if (offers == null)
                        return false;
                    return offers.hasSuperOffer();
                }
            })
            .flatMap(new Function<Offers, Observable<Long>>() {
                @Override
                public Observable<Long> apply(Offers offers) throws Throwable {
                    Long offerEndTime = offers.getRemainingTime();
                    if (offerEndTime == null) {
                        return Observable.empty();
                    }
                    AtomicLong remainingTimeSec = new AtomicLong();
                    Long currentTimeSec = System.currentTimeMillis() / 1000;
                    if (remainingTimeSec.get() == -1 && (offerEndTime > currentTimeSec)) {
                        remainingTimeSec.set(offerEndTime - currentTimeSec);
                    } else {
                        return Observable.empty();
                    }
                    return Observable.interval(1, TimeUnit.SECONDS)
                            .onBackpressureDrop()
                            .subscribeOn(Schedulers.io())
                            .observeOn(Schedulers.io())
                            .take(remainingTimeSec.intValue())
                            .doOnDispose(new Action() {
                                @Override
                                public void run() throws Throwable {
                                }
                            })
                            .doOnComplete(new Action() {
                                @Override
                                public void run() throws Throwable {
                                }
                            })
                            .map(new Function<Long, Long>() {
                                @Override
                                public Long apply(Long elapsedTimeSec) throws Throwable {
                                    return remainingTimeSec.getAndDecrement();
                                }
                            });
                }
            })
            .map(new Function<Long, String>() {
                @Override
                public String apply(Long remainingTime) throws Throwable {
                    return DateUtils.getRemainingTimeStr(remainingTime);
                }
            });
}

我正在尝试将其转换为 RxJava 3,但是一些参数已经改变:
Func1 已更改为 Function
Action0 已更改为 Action

在我进行了这些更改之后,filter 部分出现以下错误:

filter (io.reactivex.rxjava3.functions@io.reactivex.rxjava3.annotations.NonNull Predicate <? MyClass> in Observable cannot be applied to (anonymous.io.reactivex.rxjava3.functions.Function <MyClass.model.Offers.java.lang.Boolean>)

有人可以帮帮我吗?
谢谢!

英文:

this is a method written in RxJava

    public Observable&lt;String&gt; method() {
    return model.getOffers()
            .filter(new Func1&lt;Offers, Boolean&gt;() {
                @Override
                public Boolean call(Offers offers) {
                    if (offers == null)
                        return false;
                    return offers.hasSuperOffer();
                }
            })
            .flatMap(new Func1&lt;Offers, Observable&lt;Long&gt;&gt;() {
                @Override
                public Observable&lt;Long&gt; call(Offers offers) {
                    Long offerEndTime = offers.getRemainingTime();
                    if (offerEndTime == null) {
                        return Observable.empty();
                    }
					AtomicLong remainingTimeSec;
                    Long currentTimeSec = System.currentTimeMillis() / 1000;
                    if (remainingTimeSec.get() == -1 &amp;&amp; (offerEndTime &gt; currentTimeSec)) {
                        remainingTimeSec.set(offerEndTime - currentTimeSec);
                    } else {
                        return Observable.empty();
                    }
                    return Observable.interval(1, TimeUnit.SECONDS)
                            .onBackpressureDrop()
                            .subscribeOn(Schedulers.io())
                            .observeOn(Schedulers.io())
                            .take(remainingTimeSec.intValue())
                            .doOnUnsubscribe(new Action0() {
                                @Override
                                public void call() {
                                }
                            })
                            .doOnCompleted(new Action0() {
                                @Override
                                public void call() {
                                }
                            })
                            .map(new Func1&lt;Long, Long&gt;() {
                                @Override
                                public Long call(Long elapsedTimeSec) {
                                    return remainingTimeSec.getAndDecrement();
                                }
                            });
                }
            })
            .map(new Func1&lt;Long, String&gt;() {
                @Override
                public String call(Long remainingTime) {
                    return DateUtils.getRemainingTimeStr(remainingTime);
                }
            });
}

I am trying to convert it to RxJava3 but some parameters have changed:
Func1 has been changed to Function
Action0 has been changed to Action

After I'm making the changes the following error appears at filter:

filter (io.reactivex.rxjava3.functions@io.reactivex.rxjava3.annotations.NonNull Predicate &lt;? MyClass&gt; in Observable cannot be applied to (anonymous.io.reactivex.rxjava3.functions.Function &lt;MyClass.model.Offers.java.lang.Boolean&gt;)

Can anyone help me?
Thank you!

huangapple
  • 本文由 发表于 2020年5月4日 16:55:10
  • 转载请务必保留本文链接:https://java.coder-hub.com/61588457.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定