gpt4 book ai didi

java - 如何计算rx中的处理时间

转载 作者:行者123 更新时间:2023-11-29 07:41:29 25 4
gpt4 key购买 nike

对于以下流程,我想知道如何计算处理 forEach(...) 中所有数据所需的时间。

Observable
.from(1,2,3)
.flatMap(it - {})
.toBlocking()
.forEarch(it -> {//some paring logic here})

编辑

阅读本教程后:Leaving the Monad ,我觉得简单的解决方案是执行以下操作。如果我错过了什么,请告诉我

List items = Observable
.from(1,2,3)
.flatMap(it - {})
.toList();

long startTime = System.currentTimeMillis();

for(Object it : items)
{
//some parsing here
}

long processingTime = System.currentTimeMillis() - startTime

最佳答案

一个选项是创建一个 Observable 来输出时间。您可以通过使用 Observable#using 包装您的计算来做到这一点:

public class TimerExample {
public static void main(String[] args) {
final PublishSubject<Long> timings = PublishSubject.create();

final Observable<List<Integer>> list = Observable
.just(1, 2, 3)
.flatMap(TimerExample::longRunningComputation)
.toList();

final Observable<List<Integer>> timed
= Observable.using(() -> new Timer(timings), (t) -> list, Timer::time);

timings.subscribe(time -> System.out.println("Time: " + time + "ms"));

List<Integer> ints = timed.toBlocking().last();
System.out.println("ints: " + Joiner.on(", ").join(ints));

ints = timed.toBlocking().last();
System.out.println("ints: " + Joiner.on(", ").join(ints));
}

private static Observable<Integer> longRunningComputation(Integer i) {
return Observable.timer(1, TimeUnit.SECONDS).map(ignored -> i);
}

public static class Timer {
private final long startTime;
private final Observer<Long> timings;

public Timer(Observer<Long> timings) {
this.startTime = System.currentTimeMillis();
this.timings = timings;
}

public void time() {
timings.onNext(System.currentTimeMillis() - startTime);
}
}
}

在这种情况下,计时会打印到控制台,但您可以随意使用它们:

Time: 1089ms
ints: 2, 1, 3
Time: 1003ms
ints: 1, 3, 2

关于java - 如何计算rx中的处理时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29704962/

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