Java 如何将流API与HashMap一起使用

Java 如何将流API与HashMap一起使用,java,java-stream,Java,Java Stream,我有下面的代码,我使用lamda表达式将hashMap的键和值对设置为Stats列表。我是流API的新手,我想在流API中做这件事,有人能帮我吗。谢谢 final List<Stats> values = new ArrayList<>(); if (countMap != null) { countMap.forEach((k, v) -> { fina

我有下面的代码,我使用lamda表达式将hashMap的键和值对设置为Stats列表。我是流API的新手,我想在流API中做这件事,有人能帮我吗。谢谢

    final List<Stats> values = new ArrayList<>();
        if (countMap != null) {
                    countMap.forEach((k, v) -> {
                        final Stats value = new Stats();
                        value.setType(k);
                        value.setCount(v);
                        final double percent = getPercentage(v, total.get());
                        value.setPercent(percent);
                        values.add(value);
                    });
                }

private double getPercentage(final double count, final double total) {
        final double percent = (count / (total * 1.0)) * 100;
        final BigDecimal bd = new BigDecimal(percent).setScale(2, RoundingMode.HALF_UP);
        return bd.doubleValue();
    }
final List value=new ArrayList();
if(countMap!=null){
countMap.forEach((k,v)->{
最终统计值=新统计();
设置类型(k);
值。设置计数(v);
最终双百分比=getPercentage(v,total.get());
值。设置百分比(百分比);
增加(价值);
});
}
私人双倍百分比(最终双倍计数、最终双倍总计){
最终双百分比=(计数/(总数*1.0))*100;
final BigDecimal bd=新的BigDecimal(百分比).setScale(2,舍入模式.向上舍入一半);
返回bd.doubleValue();
}

您可以获取entrySet并使用streams对其进行迭代

您可以获取entrySet并使用streams对其进行迭代

您可以使用定义的全参数构造函数简化代码,如下所示:

final List<Stats> values = countMap.entrySet().stream()
        .map(e -> new Stats(e.getKey(), e.getValue(), getPercentage(e.getValue(), total.get())))
        .collect(Collectors.toList());

您可以使用定义的全参数构造函数将代码简化为如下内容:

final List<Stats> values = countMap.entrySet().stream()
        .map(e -> new Stats(e.getKey(), e.getValue(), getPercentage(e.getValue(), total.get())))
        .collect(Collectors.toList());
如果您可以为
Stats
提供一个构造函数,该构造函数将采用
k
v
(无论这些类型是什么…)可能与另一个构造函数重复,那么这将简单得多,如果您可以为
Stats
提供一个构造函数,该构造函数将采用
k
v
(无论这些类型是什么…)可能是另一种类型的副本,也可能是
final List<Stats> values = countMap != null ? countMap.entrySet().stream()
        .map(e -> new Stats(e.getKey(), e.getValue(), getPercentage(e.getValue(), total.get())))
        .collect(Collectors.toList()) : Collections.emptyList();