2016-08-22 2 views
1

Map<String, Integer> 반환 가장 낮은있다 Map.Entry<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; 
    } 
+3

무엇이 문제입니까? –

+3

을 사이드 노드로 사용하여'min'을 'Integer.MAX_VALUE'로 초기화하여 모든 값이 10000을 초과하면 버그를 생성하지 않도록하십시오. – SomeJavaGuy

+0

질문은 메소드가 가장 낮은 항목 인 Map.entry를 반환하도록하는 방법입니다. <문자열, 정수> 내가 하나가 lowest..and이 항목을 반환 –

답변

2

는 내 취향이있다 :

당신이 항목의 스트림에서 min 방법을 사용할 수있는 Java 8을 사용하도록 허용하는 경우
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; 
} 
3

. 입력 값을 비교할 Comparator를 제공하십시오. 이미 다른 사람들로부터받은 "올바른"직접 답변 게다가

public static Map.Entry<String, Integer> findLowest(Map<String, Integer> map){ 
    return map.entrySet() 
       .stream() 
       .min(Comparator.comparing(Map.Entry::getValue)) 
       .orElse(null); 
} 
+0

Java-8의 위대함!! –

0

, 나는 당신을 위해 다른 제안이 다음 "최소"값을 찾는 사용자 환경에서 더 자주 발생하는 작업 인 경우, 데이터 사용을 고려 당신의 "빈번한"문제를 해결하는 데 도움이되는 구조.

짐승 같은 사람이 될 수 있습니다 :이 관계를 추적하는 "반대로"Map<Integer, String>을 사용하십시오. 그런 다음 SortedMap을 사용하면 "가장 작은"키를 찾는 것이 훨씬 쉽고 빠릅니다.

하지만 두 가지 맵 (물론 동기화를 유지해야 함)을 사용하면 얻을 수있는 성능만큼 가치가 있습니다. 물론 유스 케이스에 따라 다릅니다.

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 

     }