如何在哈希图中找到最低值?

时间:2019-08-31 14:07:19

标签: java hashmap

我无法在哈希图中找到最小值。哈希表只有一个,在其中必须找到玩家的最低价值。

                for (Map.Entry<Player, Integer> entry1 : lowestTrump.entrySet()) {
                    Player key1 = entry1.getKey();
                    int value1 = entry1.getValue();

                    for (Map.Entry<Player, Integer> entry2 : lowestTrump.entrySet()) {
                        Player key2 = entry2.getKey();
                        int value2 = entry2.getValue();

                        if(value1 == -1 || value2 == -1){
                            break;
                        }else if(value1 < value2 && (value1 != 1 || value2 != 1)) {
                            attackerFound = key1.getName();
                        }
                    }
                }

输出应将Player中的最低值分配给AttackerFound变量。

4 个答案:

答案 0 :(得分:2)

只需将stream()min()一起使用即可获得最小值

lowestTrump.values().stream().min(Integer::compareTo);

如果lowestTrump可以为null,则还可以用Apache lowestTrump.values()包装CollectionUtils.emptyIfNull())或使用其他一些null安全的方法

答案 1 :(得分:1)

您可以像这样一步获得最低的玩家:

Player lowestPlayer = lowestTrump.entrySet()
        .stream()
        .min(Comparator.comparingInt(Map.Entry::getValue))
        .map(Map.Entry::getKey)
        .orElse(null);

String attackerFound = lowestPlayer != null ? lowestPlayer.getName() : null;

请注意,如果lowestTrump为空,则attackerFound将为null

答案 2 :(得分:0)

您可以使用树形图。这样,当您向该地图添加任何值时,它就会被排序。您可以获得第一个值,它将是最低或明智的Versa。

Map <Player, Integer> playerMap = new TreeMap<Player, Integer>();

对于Java 8+,您可以使用以下示例:

playerMap.values().stream().min(Integer::compareTo);

就是这样。

答案 3 :(得分:0)

这是我的实际工作代码

                Optional<Player> result = lowestTrump.entrySet()
                        .stream()
                        .filter(c -> c.getValue() != -1)
                        .min(Comparator.comparingInt(Map.Entry::getValue))
                        .map(Map.Entry::getKey);

                if(result != null && result.get().getSuitInHand() != -1) {
                    System.out.println("Player : " + result.get().getName() + " is the first attacker");
                }