查找并返回标记最低的条目

时间:2016-08-22 11:23:28

标签: java

我应该做的是有一个返回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;
  }

4 个答案:

答案 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

        }