【发布时间】:2017-11-30 17:42:14
【问题描述】:
假设我有一个 List 类,每个类都有一个 Map。
public class Test {
public Map<Long, Integer> map;
}
Map 中的 Long 键是时间戳,Integer 值是分数。
我正在尝试创建一个Stream,它可以组合来自所有对象的地图并输出带有唯一时间戳(Longs)和平均分数的Map。
我有这段代码,但它给了我所有分数的 sum,而不是 average(Integer 类没有 average 方法) .
Test test1 = new Test();
test1.map = new HashMap() {{
put(1000L, 1);
put(2000L, 2);
put(3000L, 3);
}};
Test test2 = new Test();
test2.map = new HashMap() {{
put(1000L, 10);
put(2000L, 20);
put(3000L, 30);
}};
List<Test> tests = new ArrayList() {{
add(test1);
add(test2);
}};
Map<Long, Integer> merged = tests.stream()
.map(test -> test.map)
.map(Map::entrySet)
.flatMap(Collection::stream)
.collect(
Collectors.toMap(
Map.Entry::getKey,
Map.Entry::getValue,
Integer::sum
)
);
System.out.println(merged);
我认为这可能不是一个简单的问题,因此请在单个 Stream 中解决,因此带有唯一时间戳的 Map 和所有分数中的 List 的输出也可以。然后我可以自己计算平均值。
Map<Long, List<Integer>>
有可能吗?
【问题讨论】:
标签: java lambda java-8 java-stream