通过使用java 8流API比较2个地图来计算百分比?

Moh*_*lah 3 java java-8 java-stream

我有两个String长的地图,我想通过比较一个地图值和另一个地图值来计算百分比.

例如:

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);
Run Code Online (Sandbox Code Playgroud)

我想通过比较map2值和map1值来计算test1和test2值的平均值.

期望的结果应该是

resultmap = [test1 : "16.66%", test2 : "25%"]
Run Code Online (Sandbox Code Playgroud)

Rom*_*kiy 5

像这样的东西

private static String asPercent(long l1, long l2) {
    return String.format("%2.2f%%", ((float) l1 / l2 * 100));
}
Run Code Online (Sandbox Code Playgroud)

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);
Run Code Online (Sandbox Code Playgroud)

这假定您拥有的每个密钥都有map1一个条目map2.

我的代码产生了16.67%你想要的16.66%; 如果你真的需要截断而不是更精确(数学)舍入,你可能需要添加一些舍入代码.