0

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

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

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

感谢您的帮助,科尔比

4

2 回答 2

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

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

然后只需实现值比较器类,如所见如何根据其值对树图进行排序?

于 2013-08-20T03:19:44.270 回答
0

TreeMap 是按键排序的,但是你可以提供一个比较器。请参阅如何根据值对地图进行排序

下面的代码是将映射转换为按值排序的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;
}
于 2013-08-20T04:05:01.990 回答