Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过使用Java8流API比较2个映射来计算百分比?_Java_Java 8_Java Stream - Fatal编程技术网

通过使用Java8流API比较2个映射来计算百分比?

通过使用Java8流API比较2个映射来计算百分比?,java,java-8,java-stream,Java,Java 8,Java Stream,我有两个长字符串映射,我想通过比较一个映射值和另一个映射值来计算百分比 例如: 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>()

我有两个长字符串映射,我想通过比较一个映射值和另一个映射值来计算百分比

例如:

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);
像这样的

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

final Map percentMap=map1.entrySet().stream()
.collect(Collectors.toMap(Map.Entry::getKey,Entry->asPercent(Entry.getValue(),map2.get(Entry.getKey()));
系统输出打印项次(百分比图);
这假设对于您在
map1
中拥有的每个键,
map2
中都有一个条目


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

您能告诉我们如何计算这些值吗?test1=20/120=0.1667吗?是的test1=20/120*100=16.67%test2=30/120*100=25%我不知道“有缺陷”,但我很难思考如何处理流。从程序上讲,这并不难。@Aominè我想用Java8流API实现。如果您有更简单的方法,请建议。您可能希望研究使用pairs来清理数据结构。
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);