英文:
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<String> method() {
return model.getOffers()
.filter(new Func1<Offers, Boolean>() {
@Override
public Boolean call(Offers offers) {
if (offers == null)
return false;
return offers.hasSuperOffer();
}
})
.flatMap(new Func1<Offers, Observable<Long>>() {
@Override
public Observable<Long> call(Offers offers) {
Long offerEndTime = offers.getRemainingTime();
if (offerEndTime == null) {
return Observable.empty();
}
AtomicLong remainingTimeSec;
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())
.doOnUnsubscribe(new Action0() {
@Override
public void call() {
}
})
.doOnCompleted(new Action0() {
@Override
public void call() {
}
})
.map(new Func1<Long, Long>() {
@Override
public Long call(Long elapsedTimeSec) {
return remainingTimeSec.getAndDecrement();
}
});
}
})
.map(new Func1<Long, String>() {
@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 <? MyClass> in Observable cannot be applied to (anonymous.io.reactivex.rxjava3.functions.Function <MyClass.model.Offers.java.lang.Boolean>)
Can anyone help me?
Thank you!
专注分享java语言的经验与见解,让所有开发者获益!
评论