我应该做的是有一个返回Map.Entry<String, Integer>
通过参数Map<String, Integer>
的方法
并返回类型Map.Entry<String, Integer>
它具有最低的整数。
public static Entry<String, Integer> findLowest(Map<String, Integer> map)
{
int min = 10000;
String nm ="";
Set<Map.Entry<String, Integer>> ss = map.entrySet();
System.out.println("map entryset"+map.entrySet());
Iterator<Map.Entry<String, Integer>> it = ss.iterator();
Map.Entry<String, Integer> e = null;
Map.Entry<String, Integer> ee = e;
while(it.hasNext())
{
e = it.next();
System.out.println("e.getvalue: "+ e.getValue());
System.out.println("min: "+ min);
if(e.getValue() < min)
{
System.out.println("lower than");
min = e.getValue();
nm = e.getKey();
}
}
System.out.println(ee);
return e;
}
答案 0 :(得分:3)
如果允许使用Java 8,则可以从条目流中使用min
方法。只需提供Comparator,它将比较条目的值。
public static Map.Entry<String, Integer> findLowest(Map<String, Integer> map){
return map.entrySet()
.stream()
.min(Comparator.comparing(Map.Entry::getValue))
.orElse(null);
}
答案 1 :(得分:2)
有很多方法可以做到这一点,我的偏好是:
public static Map.Entry<String, Integer> findLowest(Map<String, Integer> map) {
Map.Entry<String, Integer> result = null;
if (map != null && !map.isEmpty()) {
Iterator<Map.Entry<String, Integer>> it = map.entrySet().iterator();
result = it.next();
while (it.hasNext()) {
Map.Entry<String, Integer> current = it.next();
if (current.getValue() < result.getValue()) {
result = current;
}
}
}
return result;
}
答案 2 :(得分:0)
除了&#34;正确&#34;你已经从其他人那里得到的直接答案,我对你有不同的建议:如果找到&#34;最小值&#34; value是一种在您的环境中更频繁发生的操作,请考虑使用可帮助您解决问题的数据结构。你的问题。
蛮力的东西可能是:使用&#34;反向&#34; Map<Integer, String>
跟踪这种关系。然后你可以考虑使用SortedMap
,这样可以更容易/更快地找到最小的&#34;键。
但当然,这取决于你的使用案例,如果有两张地图(当然你需要保持同步)值得通过这样做获得的性能。
答案 3 :(得分:0)
HashMap<String, Integer> hm = new HashMap<String, Integer>();
hm.put("second", 2);
hm.put("third", 3);
hm.put("fourth", 4);
hm.put("first", 1);
Set<Entry<String, Integer>> set = hm.entrySet();
List<Entry<String, Integer>> list = new ArrayList<Entry<String, Integer>>(
set);
Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
public int compare(Map.Entry<String, Integer> o1,
Map.Entry<String, Integer> o2) {
return o1.getValue().compareTo(o2.getValue());
}
});
return list.get(0); //will return lowest value from that entry set
}