gpt4 book ai didi

java - 将数据流转换为一组对象

转载 作者:行者123 更新时间:2023-12-01 10:01:39 26 4
gpt4 key购买 nike

我是 java 8 流新手,有一个问题我有一个像这样组成的数据流

RequestObject {
String Name;
Long timestamp;
Set<String> data;
}

我想流式传输这些数据并对其进行处理,并计算名称及其出现次数的百分比。

我的结果对象是

ProcessedData {
String name; //request object name
float pct; //percentage of times it appears in all the stream
int count; count of times it appears
}

我不确定是否应该使用reduce或collect以及它的外观。

Set<ProcessedData> result = sourceData.stream().collect/reduce....

最佳答案

假设您的 RequestObject 类中有一个 getName() 方法,您可以使用 Collectors.groupingBy() 来实现。和 Collectors.counting()如下:

Map<String, Long> map = sourceData.stream()
.collect(Collectors.groupingBy(
RequestObject::getName,
Collectors.counting()));

在那张 map 中,您拥有所需的所有信息。要获取给定名称的 %,只需执行 (float) byName.get("GIVEN_NAME") * 100.0/(float) sourceData.size() 即可。要对每个名称执行此操作,请迭代 map 并为每个条目创建一个 ProcessedData 实例:

Set<ProcessedData> processedData = map.entrySet().stream()
.map(e -> new ProcessedData(
entry.getKey(),
entry.getValue(),
(float) entry.getValue() * 100.0 / (float) sourceData.size()))
.collect(Collectors.toSet());

这假设您在 ProcessedData 中有一个接受 namecountpct 的构造函数。

关于java - 将数据流转换为一组对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36777057/

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