gpt4 book ai didi

java - 根据 Java rx 中的最后两个当前值进行过滤

转载 作者:搜寻专家 更新时间:2023-10-31 19:27:31 25 4
gpt4 key购买 nike

我正在尝试使用 Java 响应式扩展构建一个简单的应用程序。我有两个连续发出温度值的流,我想检测并过滤掉可能是错误的感测温度尖峰,为此我也需要考虑先例值,以便我可以像这样考虑变化:

filtering on pairs idea

我仍然无法在文档中找到合适的运算符。有人知道我该如何完成任务吗?我应该自定义运算符吗?

这些是我的流:

double min = 50, max = 75, spikeFreq = 0.01;
Observable<Double> tempStream1 = Observable.create((
Subscriber<? super Double> subscriber) -> {
new TempStream(subscriber, min, max, spikeFreq).start();
});

Observable<Double> tempStream2 = Observable.create((
Subscriber<? super Double> subscriber) -> {
new TempStream(subscriber, min, max, spikeFreq).start();
});

public class TempStream extends Thread{

private Subscriber<? super Double> subscriber;
private TempSensor sensor;

public TempStream(Subscriber<? super Double> subscriber, double min,
double max, double spikeFreq) {
this.subscriber = subscriber;
sensor = new TempSensor(min, max, spikeFreq);
}

@Override
public void run() {
Random gen = new Random(System.currentTimeMillis());
while (!subscriber.isUnsubscribed()) {
try {
subscriber.onNext(sensor.getCurrentValue());
Thread.sleep(1000 + gen.nextInt() % 1000);
} catch (Exception ex) {
subscriber.onError(ex);
}
}
subscriber.onCompleted();
}
}

最佳答案

也许 buffer 运算符 ( http://reactivex.io/documentation/operators/buffer.html ) 在这种情况下可能会有所帮助。您想将 buffercount = 2skip = 1 一起使用。这样您就可以“先行”了解流中的一个元素。

例如:

stream.buffer(2,1).filter(buf -> buf.size() == 2 && buf.get(0) - buf.get(1) < max);

请注意,此示例还检查是否缓冲了两个值,因为可能会发生在流完成时只发出一个值的情况。

关于java - 根据 Java rx 中的最后两个当前值进行过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30614645/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com