Java HashMap获取值(大部分值)

时间:2017-03-23 15:58:41

标签: java hashmap

你好这么奇怪的问题...... 让我们从代码的简单描述开始: 我有一个填充了<PlayerUUID, KingdomUUID>的哈希映射 其中playerUUID是hashmap中的键(显然)

现在,对于我的捕获过程系统,我需要确定有多少不同的值,因此哪个值最大。

例如: 3个玩家正在攻击一个点,2个玩家在ORION王国,1个在Erion。 我需要检查hashmap的值,看看哪些王国拥有最多的攻击者。 (ORION就是答案)

此致 托马斯

如果不提出要求,我希望这个描述足够好!

2 个答案:

答案 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();
}

有关Java 8 streams.

的更多信息

有关Java 8 lambdas.

的更多信息

答案 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()多少次。