Java 从映射中获取平均值条目
我试图使用Java8从映射中获取平均值,但不是获取值本身,而是获取Map.EntryJava 从映射中获取平均值条目,java,lambda,java-8,hashmap,average,Java,Lambda,Java 8,Hashmap,Average,我试图使用Java8从映射中获取平均值,但不是获取值本身,而是获取Map.Entry double average = totals.entrySet() .stream() .mapToDouble(i -> i.getValue()) .average() .orElse(0); //Want to ge
double average = totals.entrySet()
.stream()
.mapToDouble(i -> i.getValue())
.average()
.orElse(0); //Want to get Map.Entry instead
您无法获得这样的条目,因为平均值甚至不需要是地图中的值 例如,在地图中
{"A": 1, "B": 2}
平均值为1.5,这不是地图的值。在这种情况下,您希望获得哪个条目
您可以做的是找到第一个最接近平均值的条目,如下所示:
Map<String, Integer> m = new HashMap<>();
m.put("A", 1);
m.put("B", 2);
m.put("C", 4);
// First, compute average
double average = m.values().stream().mapToDouble(Integer::doubleValue).average().orElse(0);
// Then, find entry closest to average
Map.Entry<String, Integer> e = m.entrySet().stream()
.min(Comparator.comparing(a -> Math.abs(a.getValue() - average)))
.orElse(null);
但平均数不能在您的任何条目中。如果你有{1,2,4},平均值是7/3,但是没有一个Map.Entry有这个值。@luk2302是的,它不是不能是但不能是。此表单不存在?:3@AndyTurner:当然,谢谢你的提示!我修改了我的答案。