2013-08-20 131 views
0

我有一個HashMap中的條目列表,一個字符串作爲一個鍵和一個Long作爲一個值。我試圖檢查價值是否大於某個數字,但我不知道如何獲得價值並檢查它。如何獲取HashMap值並將其與數字進行比較

我知道這是不正確的,但這個可以說明我的意思比我更可以解釋:

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

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

這得到的時間量的玩家離線允許,offlimeTimeLimitConfig,然後用1000乘以(所以它以毫秒爲單位),然後添加當前時間。我想檢查散列表中的任何值是否大於當前時間加上時間限制,然後執行代碼。

我一直在做研究,並且發現了其他方法來存儲我的數據(比如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

TreeMap中被排序的值比較的類。鍵,但你可以提供一個比較器。請參見How to sort a Map on the values

下面的代碼將映射轉換爲按值排序的linkedHashMap。

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; 
} 

比較這裏使用:

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) { 
    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; 
} 
相關問題