获取地图的最小值(键,双精度)
有没有一种方法(也许是使用Google Collections)来获得一个的最小值?Map(Key, Double)
在传统方式中,我必须根据值对地图进行排序,并采用第一个/最后一个。
有没有一种方法(也许是使用Google Collections)来获得一个的最小值?Map(Key, Double)
在传统方式中,我必须根据值对地图进行排序,并采用第一个/最后一个。
您可以使用标准的 Collections#min()
来实现此目的。
Map<String, Double> map = new HashMap<String, Double>();
map.put("1.1", 1.1);
map.put("0.1", 0.1);
map.put("2.1", 2.1);
Double min = Collections.min(map.values());
System.out.println(min); // 0.1
更新:由于您也需要密钥,因此,我在Collections
或Google Collections2
API中看不到方法,因为a不是.Maps#filterEntries()
也不是很有用,因为你只知道迭代结束时的实际结果。Map
Collection
然后,最直接的解决方案是:
Entry<String, Double> min = null;
for (Entry<String, Double> entry : map.entrySet()) {
if (min == null || min.getValue() > entry.getValue()) {
min = entry;
}
}
System.out.println(min.getKey()); // 0.1
(左侧为空值检查)min
您仍然可以使用自定义来获取具有较低值的:Collections.min
Comparator
Map.Entry
Map<String, Double> map = new HashMap<String, Double>();
map.put("1.1", 1.1);
map.put("0.1", 0.1);
map.put("2.1", 2.1);
Entry<String, Double> min = Collections.min(map.entrySet(), new Comparator<Entry<String, Double>>() {
public int compare(Entry<String, Double> entry1, Entry<String, Double> entry2) {
return entry1.getValue().compareTo(entry2.getValue());
}
});
System.out.printf("%s: %f", min.getKey(), min.getValue()); // 0.1: 0.100000
使用 Java 8:
Entry<String, Double> min = Collections.min(map.entrySet(),
Comparator.comparing(Entry::getValue));