我有以下代码来获得平均滑动窗口。我在订阅函数中遇到类型不匹配错误。我试图使用RxMath平均函数获得cpu使用的平均值。
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import rx.*;
import rx.Observable;
import rx.functions.Action1;
import rx.functions.Func1;
import rx.observables.MathObservable;
public class stack {
private ScheduledThreadPoolExecutor executorPool;
public void test() {
Double tests = (double) 100;
Observable myObservable = Observable.interval(1000, TimeUnit.MILLISECONDS)
.map(new Func1<Long, Double>() {
@Override
public Double call(Long aLong) {
Double d = (double) 100;//calculate CPU usage
return d;
}
})
.window(1, TimeUnit.SECONDS)
.flatMap(new Func1<Observable<Double>, Observable<Double>>() {
@Override
public Observable<Double> call(Observable<Double> windowObservable) {
return MathObservable.averageDouble(windowObservable);
}
})
.subscribe(new Action1<Double>() {
public void call(Double s) {
System.out.println(s);
}
});
}
}
答案 0 :(得分:2)
只需从头开始删除Observable myObservable =
。
subscribe
正在返回Subscription
,而不是Observable
。在您的情况下,您不需要记住对Observable
的引用。
如果您这样做,请遵循以下模式:
Observable<Double> myObservable = stuffThatReturnsAnObservable();
Subscription subscription = myObservable.subscribe();
答案 1 :(得分:0)
要添加Rob在您的案例中提到的内容,您甚至不需要对订阅的引用,因为您所做的只是在订阅时向其传递操作。引用订阅后,您可以取消订阅,这将停止向您发送活动。