我无法在哈希图中找到最小值。哈希表只有一个,在其中必须找到玩家的最低价值。
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变量。
答案 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");
}