如何格式化流收集器的双精度结果。averagingInt

问题描述 投票:0回答:1

我有一张地图

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);

我对这两种解决方案都可以,但我不知道如何在收集时将其组合到流中。有没有办法将结果地图限制为小数点后两位?

java java-stream collectors
1个回答
0
投票

最简单的选择是在打印时执行:

result.entrySet().stream().forEach(entry -> {
  System.out.printf("%s: %.2f%n", entry.key, entry.value);
});
© www.soinside.com 2019 - 2024. All rights reserved.