我有一个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));
}
感谢您的帮助, 科尔比
答案 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;
}