如何获取HashMap值并将其与数字进行比较

时间:2013-08-20 03:08:53

标签: java hashmap compare contains treemap

我有一个HashMap中的条目列表,一个String作为键,一个Long作为值。我正在尝试检查Value是否大于某个数字,但我不确定如何获取该值并进行检查。

我知道这是不正确的,但这可能表明我的意思比我能解释的更好:

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

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

这将获得允许玩家离线的时间,offlimeTimeLimitConfig,然后乘以1000(所以它以毫秒为单位),然后添加当前时间。我想检查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));
        }

感谢您的帮助, 科尔比

2 个答案:

答案 0 :(得分:0)

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

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

然后实现值比较器类,如How to sort a treemap based on its values?

所示

答案 1 :(得分: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;
}