gpt4 book ai didi

java - 使用 Java 8 Stream API 处理 HashMap

转载 作者:行者123 更新时间:2023-12-01 17:54:37 24 4
gpt4 key购买 nike

我有一个表单的哈希表

Map<String, Map<String,Double>

我需要处理它并创建另一个具有相同结构的。

按照示例解释目标

INPUT HASH TABLE
----------------------------
| | 12/7/2000 5.0 |
| id 1 | 13/7/2000 4.5 |
| | 14/7/2000 3.4 |
...
| id N | .... |

OUTPUT HASH TABLE
| id 1 | 1/1/1800 max(5,4.5,3.4) |
... ...

特别是,输出必须具有相同的键(id1,...,id n)内部哈希表必须有一个固定的键(1/1/1800)和一个处理过的值。

我当前(不工作)的代码:

output = input.entrySet()
.stream()
.collect(
Collectors.toMap(entry -> entry.getKey(),
entry -> Collectors.toMap(
e -> "1/1/2000",
e -> {
// Get input array
List<Object> list = entry.getValue().values().stream()
.collect(Collectors.toList());

DescriptiveStatistics stats = new DescriptiveStatistics();

// Remove the NaN values from the input array
list.forEach(v -> {
if(!new Double((double)v).isNaN())
stats.addValue((double)v);
});

double value = stats.max();

return value;
}));

问题出在哪里?

谢谢

最佳答案

问题在于尝试在第一个 Collectors.toMap 中调用第二个类型 Collectors.toMapCollectors.toMap 应传递给接受 Collector 的方法。

这是实现您想要的目标的一种方法:

Map<String, Map<String,Double>>
output = input.entrySet()
.stream()
.collect(Collectors.toMap(e -> e.getKey(),
e -> Collections.singletonMap (
"1/1/1800",
e.getValue()
.values()
.stream()
.filter (d->!Double.isNaN (d))
.mapToDouble (Double::doubleValue)
.max()
.orElse(0.0))));

请注意,不需要第二个Collectors.toMap。输出的内部 Map 每个都有一个条目,因此您可以使用 Collections.singletonMap 来创建它们。

关于java - 使用 Java 8 Stream API 处理 HashMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46297400/

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