gpt4 book ai didi

java - ReactiveX:计算 Observable 中不同元素的频率

转载 作者:行者123 更新时间:2023-11-30 08:07:05 26 4
gpt4 key购买 nike

我有一个 Observable<String> .我想把它变成一个 Map<String, Int>它告诉我每个不同字符串的出现次数。

Observable 包含约 10 亿个元素,其中 1000 个是不同的(因此不能将整个数据集存储在 RAM 中)。目前我遍历 Observable并更新 HashMap .我还确保在同一个线程上进行观察以避免竞争条件。但是,获取元素频率本质上应该很容易并行化,因此最好利用它。

有办法吗?

最佳答案

您可以使用groupBy 而不是自己维护HashMapgroupBy 将为每个键创建一个 Observable,您可以在不同的调度程序上订阅它。例如,

public class KeyCounter {
int key;
long count;

public KeyCounter(int key, long count) {
this.key = key;
this.count = count;
}

@Override
public String toString() {
return "key: " + key + " count: " + count;
}
}

@Test
public void foo() {
Observable<Integer> o = Observable.just(1, 2, 3, 2, 1);
o.groupBy(i -> i).flatMap(
group ->
group.subscribeOn(Schedulers.computation()).countLong().map(count -> new KeyCounter(group.getKey(), count))
).subscribe(System.out::println);

try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}

关于java - ReactiveX:计算 Observable 中不同元素的频率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33904050/

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