有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

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

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

问候,, 托马斯

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


共 (2) 个答案

  1. # 1 楼答案

    使用以下方法:

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

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

  2. # 2 楼答案

    你可以做f1sh做的事。然而,Java8添加了流和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.