2013-08-20 92 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; 
} 
相关问题