2013-08-20 2 views
0

HashMap에 항목 목록, 키로 String, 값으로 Long이 있습니다. 값이 특정 숫자보다 큰지 확인하려고하지만 값을 가져 와서 확인할 수있는 방법이 확실하지 않습니다.HashMap 값을 가져 와서 숫자와 비교하는 방법

나는이 잘못 알고 있지만, 내가 설명 할 수있는 것보다 더 나은 무엇을 의미하는지 표시 될 수 있습니다 :이 후, 플레이어가 오프라인 허용 1000에 의해 증식을 offlimeTimeLimitConfig을하는 시간을 가져

long offlineTimeLimit = (offlineTimeLimitConfig*1000); 
long limit = (offlineTimeLimit + System.currentTimeMillis()); 
Long playerName = playerTimeCheck.get(p); 

if (playerTimeCheck.containsValue(> limit)) { 
} 

(그래서 밀리 초 단위), 현재 시간을 더합니다. hashmap의 어떤 값이 현재 시간과 제한 시간을 더한 값보다 큰지 확인한 다음 코드를 실행하고 싶습니다.

나는 연구를 해왔고 TreeMap과 같은 데이터를 저장하는 다른 방법을 찾았습니다. 데이터를 저장하는 더 좋은 방법이 될지 모르겠습니다. 여기

코드의 나머지 부분입니다 : 도움을

String p = event.getPlayer().getName(); 
HashMap<String, Long> playerTimeCheck = new HashMap<String, Long>(); 
ConfigurationSection section = getConfig().getConfigurationSection("PlayerTime"); 
long currentTime = System.currentTimeMillis(); 
String playerCheck = getConfig().getString("PlayerTime"); 

for (String key : section.getKeys(false)) { 
      playerTimeCheck.put(key, section.getLong(key)); 
     } 

감사합니다, 콜비

+0

? 트리 맵을 사용하여 내림차순으로 정렬 한 다음 첫 번째 항목의 값이> 값인지 아닌지 확인하십시오. – jcampos8782

+0

@ jcampos8782 트리 맵은 키별로 정렬되며 여기서는 작동하지 않습니다. – criszhao

+0

오, 그래 맞아 ... 그냥 값으로 정렬 비교기를 사용하십시오 : http://stackoverflow.com/questions/1448369/how-to-sort-a-treemap-based-on-its-values – jcampos8782

답변

0
Map<String,Long> playerTimeChcek = new TreeMap<>(new ValueComparator()); 
... 

if(!playerTimeCheck.isEmpty() && playerTimeCheck.firstEntry().getValue() > limit) { 
    ... 
} 

그럼 그냥 TreeMap에 의해 정렬됩니다 How to sort a treemap based on its values?

0

와 같이 값의 비교를 구현 키,하지만 당신은 비교를 제공 할 수 있습니다. How to sort a Map on the values

아래 코드는지도를 linkedHashMap 값으로 정렬하여 변환합니다.

Comparator<Entry<String, Integer>> comparator = new Comparator<Entry<String, Integer>() { 

       @Override 
       public int compare(Entry<String, Integer> o1, 
         Entry<String, Integer> o2) { 
        return o1.getValue().compareTo(o2.getValue()); 
       } 
      } 

를하거나이를 사용 :

public static <K, V> LinkedHashMap<K, V> sort(Map<K, V> map, 
     final Comparator<Entry<K, V>> comparator) { 
    List<Entry<K, V>> list = Lists.newArrayList(map.entrySet()); 

    Collections.sort(list, comparator); 
    LinkedHashMap<K, V> sortedMap = new LinkedHashMap<K, V>(); 
    for (Entry<K, V> entry : list) { 
     sortedMap.put(entry.getKey(), entry.getValue()); 
    } 
    return sortedMap; 
} 

비교기

여기에 사용

public static <K, V> LinkedHashMap<K, V> sort(Map<K, V> map) { 
    List<Entry<K, V>> list = Lists.newArrayList(map.entrySet()); 

    Collections.sort(list, new Comparator<Entry<K, V>>() { 

     @SuppressWarnings("unchecked") 
     @Override 
     public int compare(Entry<K, V> o1, Entry<K, V> o2) { 
      return ((Comparable<V>) o1.getValue()).compareTo(o2.getValue()); 
     } 
    }); 
    LinkedHashMap<K, V> sortedMap = new LinkedHashMap<K, V>(); 
    for (Entry<K, V> entry : list) { 
     sortedMap.put(entry.getKey(), entry.getValue()); 
    } 
    return sortedMap; 
} 
당신은 그냥 맵에서 값이 어떤 수보다 큰 경우 알 필요가
관련 문제