我有一张地图
Map<String,Double>
是java流分组的结果,它按团队对玩家进行分组并平均他们的年龄作为任务的解决方案
将球员按各自球队分组,并计算每队的平均年龄。
即:
Map<String,Double> result = players.stream().collect(
Collectors.groupingBy(Player::getTeam, Collectors.averagingInt(Player::getAge)));
打印样本值时的结果图显示如下:
result.entrySet().stream().forEach(System.out::println);
输出
Tottenham Hotspur=25.333333333333332
Liverpool=26.333333333333332
Manchester City=23.666666666666668
Arsenal=24.0
Chelsea=25.333333333333332
Manchester United=23.0
我想将小数部分限制为小数点后两位。
我搜索了如何对双精度数进行舍入,这在java中似乎并不简单。但类似下面的内容适用于小数点后两位:
double value = 12.34567
double rounded = (double) Math.round(value * 100) / 100;
或者将其转换为字符串:
String result = String.format("%.2f", value);
我对这两种解决方案都可以,但我不知道如何在收集时将其组合到流中。有没有办法将结果地图限制为小数点后两位?
最简单的选择是在打印时执行:
result.entrySet().stream().forEach(entry -> {
System.out.printf("%s: %.2f%n", entry.key, entry.value);
});