你好这么奇怪的问题......
让我们从代码的简单描述开始:
我有一个填充了<PlayerUUID, KingdomUUID>
的哈希映射
其中playerUUID是hashmap中的键(显然)
现在,对于我的捕获过程系统,我需要确定有多少不同的值,因此哪个值最大。
例如: 3个玩家正在攻击一个点,2个玩家在ORION王国,1个在Erion。 我需要检查hashmap的值,看看哪些王国拥有最多的攻击者。 (ORION就是答案)
此致 托马斯
如果不提出要求,我希望这个描述足够好!
答案 0 :(得分:1)
你可以做f1sh做的事情。但是,Java 8添加了流和lambda,您也可以使用它们。生成的代码更紧凑,更易读,并且更不容易出错。这段代码会慢一些,但除非你处理很多价值,否则你甚至不会感觉到它。
public KingdomUUID getMax(HashMap<PlayerUUID, KingdomUUID> inputMap) {
return inputMap.entrySet()
.stream()
.max((entry1, entry2) -> entry1.getValue() > entry2.getValue() ? 1 : -1)
.get()
.getValue();
}
的更多信息
的更多信息
答案 1 :(得分:0)
使用此方法:
Entry<KingdomUUID, Integer> getMax(Map<PlayerUUID, KingdomUUID> input) {
Map<KingdomUUID, Integer> r = new HashMap<>();
for(KingdomUUID kingdom:input.values()){
final Integer old = r.get(kingdom);
r.put(kingdom, old==null?1:old+1);
}
Map.Entry<KingdomUUID, Integer> max = null;
for(Map.Entry<KingdomUUID, Integer> e:r.entrySet()){
if(max==null || e.getValue()>max.getValue()){
max = e;
}
}
return max;
}
您可以在返回对象上使用getKey()
来查看最常出现的KingdomUUID,以及getValue()
多少次。