使用java 8 stream API比较2个地图来计算百分比?
问题描述:
我有两个长字符串的地图,我想通过比较一个地图值与另一个地图值来计算百分比。使用java 8 stream API比较2个地图来计算百分比?
对于如:
Map<String, Long> map1 = new ConcurrentHashMap<String, Long>();
map1.put("test1", (long) 20);
map1.put("test2", (long) 30);
Map<String, Long> map2 = new ConcurrentHashMap<String, Long>();
map2.put("test1", (long) 120);
map2.put("test2", (long) 120);
我想MAP2值与MAP1值进行比较来计算测试1和测试2的值的平均值。
理想的结果应当是
resultmap = [test1 : "16.66%", test2 : "25%"]
答
像这样的事情
private static String asPercent(long l1, long l2) {
return String.format("%2.2f%%", ((float) l1/l2 * 100));
}
和
final Map<String, String> percentMap = map1.entrySet().stream()
.collect(Collectors.toMap(Map.Entry::getKey, entry -> asPercent(entry.getValue(), map2.get(entry.getKey()))));
System.out.println(percentMap);
这是假设你在map1
有每一个关键的存在map2
的条目。
我的代码产生16.67%
并且您想要16.66%
;如果您真的需要截断而不是更准确(数学)四舍五入,您可能需要添加一些舍入代码。
你能告诉我们你如何计算这些值吗?是test1 = 20/120 = 0.1667? – markspace
是test1 = 20/120 * 100 = 16.67%test2 = 30/120 * 100 = 25% –
我不知道“有缺陷”,但我很难考虑如何使用流来完成此操作。程序上,这并不难。 – markspace