在Java8中使用Lambda迭代映射?

在Java8中使用Lambda迭代映射?,java,dictionary,lambda,java-8,Java,Dictionary,Lambda,Java 8,我不熟悉java和lambda,我想在地图中找到值的总和和平均值 我的对象类似于地图浏览器数据 数据的格式是 <Chrome, <UK, 2.90>> <Chrome, <US, 5.20>> <Chrome, <EU, -0.25>> <IE, <UK, 0.1>> <IE, <US, -.20>> <IE, <EU, 0.00>> <FF, &

我不熟悉java和lambda,我想在地图中找到值的总和和平均值

我的对象类似于
地图浏览器数据

数据的格式是

<Chrome, <UK, 2.90>>
<Chrome, <US, 5.20>>
<Chrome, <EU, -0.25>>
<IE, <UK, 0.1>>
<IE, <US, -.20>>
<IE, <EU, 0.00>>
<FF, <UK, 0.90>>
<FF, <US, 1.20>>
<FF, <EU, 1.25>>

最终结果需要两个映射,一个用于求和,另一个用于平均

map1 = <CountryName, SumValue>

map2 = <CountryName, AverageValue>
map1=
map2=
所以上面例子的结果是

map1 = <UK, 3.9>
       <US, 6.2>
       <EU, 1>

map2 = <UK, 1.3>
       <US, 2.07>
       <EU, 0.33>
map1=
map2=

如何实现这一点?

我们的想法是对内部映射的每个条目进行流式处理,并应用适当的收集器来计算所需的值:

Map<String, DoubleSummaryStatistics> stats = browserData.values().stream()
        .flatMap(m -> m.entrySet().stream()) //Stream the inner maps' entrySets
        .collect(groupingBy(Entry::getKey, summarizingDouble(Entry::getValue)));
DoubleSummaryStatistics ds = stats.getOrDefault("EU", new DoubleSummaryStatistics());
System.out.println("sumEu = " + ds.getSum());
System.out.println("avgEu = " + ds.getAverage());
Map stats=browserData.values().stream()
.flatMap(m->m.entrySet().stream())//流式处理内部映射的入口集
.collect(groupingBy(Entry::getKey,summaringdouble(Entry::getValue));
DoubleSummaryStatistics ds=stats.getOrDefault(“EU”,新的DoubleSummaryStatistics());
System.out.println(“sumEu=“+ds.getSum());
System.out.println(“avgEu=“+ds.getAverage());
如果确实需要单个总和和平均值映射,可以从摘要映射创建它们:

Map<String, Double> map1 = stats.entrySet().stream()
        .collect(toMap(Entry::getKey, e -> e.getValue().getSum()));
Map<String, Double> map2 = stats.entrySet().stream()
        .collect(toMap(Entry::getKey, e -> e.getValue().getAverage()));
Map map1=stats.entrySet().stream()
.collect(toMap(条目::getKey,e->e.getValue().getSum());
Map map2=stats.entrySet().stream()
.collect(toMap(Entry::getKey,e->e.getValue().getAverage());
注意:我使用了以下静态导入:
导入静态java.util.stream.Collectors.groupingBy
import static java.util.stream.Collectors.summaringdouble
导入静态java.util.stream.Collectors.toMap

您应该提供您尝试过的代码。否则,这个问题看起来像是“给我密码”问题。