Java 如何将流API与HashMap一起使用
我有下面的代码,我使用lamda表达式将hashMap的键和值对设置为Stats列表。我是流API的新手,我想在流API中做这件事,有人能帮我吗。谢谢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
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();