Java HashMap获取值(其中大部分值)

Java HashMap获取值(其中大部分值),java,hashmap,Java,Hashmap,嗨,这是个奇怪的问题。。。 让我们从代码的简单描述开始: 我有一个用 其中playeruid是hashmap中的键(显然) 现在,对于我的捕获处理系统,我需要确定有多少个不同的值,从而确定哪一个值的差异最大 例如: 3名玩家攻击一个点,2名玩家在猎户座王国,1名玩家在伊隆。 我需要检查hashmap的值,看看哪个王国拥有最多的攻击者。(猎户座是答案) 问候,, 托马斯 我希望这个描述是足够好的,如果不要求离开 使用此方法: Entry<KingdomUUID, Integer> ge

嗨,这是个奇怪的问题。。。 让我们从代码的简单描述开始: 我有一个用
其中playeruid是hashmap中的键(显然)

现在,对于我的捕获处理系统,我需要确定有多少个不同的值,从而确定哪一个值的差异最大

例如: 3名玩家攻击一个点,2名玩家在猎户座王国,1名玩家在伊隆。 我需要检查hashmap的值,看看哪个王国拥有最多的攻击者。(猎户座是答案)

问候,, 托马斯

我希望这个描述是足够好的,如果不要求离开

使用此方法:

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;
}
Entry getMax(地图输入){
Map r=新的HashMap();
对于(KingdomUUID王国:input.values()){
最终整数old=r.get(王国);
r、 put(kingdom,old==null?1:old+1);
}
Map.Entry max=null;
对于(Map.Entry e:r.entrySet()){
如果(max==null | | e.getValue()>max.getValue()){
max=e;
}
}
返回最大值;
}

您可以在return对象上使用
getKey()
,查看哪个KingdomUUID最常出现,以及
getValue()
出现多少次。

您可以执行f1sh所做的操作。但是,Java8添加了streams和lambda,您也可以使用它们。生成的代码更紧凑,可读性更强,更不容易出错。这段代码会稍微慢一点,但是除非处理很多值,否则您可能甚至感觉不到它

public KingdomUUID getMax(HashMap<PlayerUUID, KingdomUUID> inputMap) {
    return inputMap.entrySet()
        .stream()
        .max((entry1, entry2) -> entry1.getValue() > entry2.getValue() ? 1 : -1)
        .get()
        .getValue();
}
public KingdomUUID getMax(HashMap-inputMap){
返回inputMap.entrySet()
.stream()
.max((entry1,entry2)->entry1.getValue()>entry2.getValue()?1:-1)
.get()
.getValue();
}
更多关于


更多关于

您尝试过什么吗?制作一个新的HashMap,在所有Map上循环。在您的Map中输入,并对新HashMap中的一个进行自动递增。最后,你可以循环使用hashmap并获得最大值。我正在尝试atm,但我的大脑崩溃了,我得到了前两个部分,但最终我无法从新的hashmap中获得最高值的键,我可能只是有点累了,但我找不到简单的解决方案,如何找到最高值,从而从中获得密钥:S(1)“让我们从简单的代码描述开始”——既然可以向我们展示map声明,为什么还要描述代码?(2) 幻想游戏的东西掩盖了你的真实问题;如果您只使用
并询问如何找到出现次数最多的
,回答起来会更容易。我想让它说playeruid和KingdomUUID实际上不是对象,而是UUID对象的名称:)这仍然有效吗?@KingConquest您的意思是这些值是串?当然会的。它将与任何类型的键和值一起工作。但是,我不确定为什么要将字符串而不是实际对象保存到映射中?我需要检查hashmap的值,看看哪个王国的攻击者最多。但是这个答案只返回具有最高值的KingdomUUID?