Java 如何检查hashmap中具有特定值的键数
我想弄明白的是,如何检查hashmap(在我的例子中,它可以有任意数量的键)是否只有一个特定值被分配给它。我正在努力解释这一点 如果我有一个有10个键的hashmap(每个键都是游戏中的玩家,根据他们所处的“游戏状态”分配有一个游戏状态),并且在_游戏中只有一个玩家具有游戏状态,那么我如何检查实际上只有一个键被分配了_游戏中的值,没有两个键具有该值?使用streams:Java 如何检查hashmap中具有特定值的键数,java,hashmap,Java,Hashmap,我想弄明白的是,如何检查hashmap(在我的例子中,它可以有任意数量的键)是否只有一个特定值被分配给它。我正在努力解释这一点 如果我有一个有10个键的hashmap(每个键都是游戏中的玩家,根据他们所处的“游戏状态”分配有一个游戏状态),并且在_游戏中只有一个玩家具有游戏状态,那么我如何检查实际上只有一个键被分配了_游戏中的值,没有两个键具有该值?使用streams: Map<String, String> data = new HashMap<>(); // addi
Map<String, String> data = new HashMap<>();
// adding data
long count = data.values().stream().filter(v -> v.equals("IN_GAME")).count();
Map data=newhashmap();
//添加数据
长计数=data.values().stream().filter(v->v.equals(“在游戏中”)).count();
Count将返回地图中“IN_GAME”值的数量。使用迭代器实例似乎可以解决问题
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
public class Stack{
public static void main(String[] args){
//create a hashmap
HashMap<Integer, String> map = new HashMap<Integer,String>();
//populate with dummy out-game entries
for(int i = 0; i < 8;i++){
map.put(i, "OUT-GAME");
}
// add the last two with in-game value
map.put(8, "IN-GAME");
map.put(9, "IN-GAME");
//declare an iterator on map
Iterator it = map.entrySet().iterator();
//number of time "in-game" is encountered
int check = 0;
//while the iterator has more to go
while(it.hasNext()){
//get the key-value pairs and print them just for checking
//the entries
Map.Entry pair = (Map.Entry<Integer,String>) it.next();
System.out.println(pair.getKey() + " " + pair.getValue());
//if the value "in-game" is encountered increment the check by 1
if(pair.getValue().equals("IN-GAME")){
System.out.println("We have a player in game");
check++;
}
//if "in-game" is encountered more than once, then print an alarm
if(check > 1){
System.out.println("More than 1 player in game. There's something wrong");
}
}
//if there's only one player with "in-game", inform me
if(check == 1){
System.out.println("We have exactly one player in the game");
}
}
}
import java.util.HashMap;
导入java.util.Iterator;
导入java.util.Map;
公共类堆栈{
公共静态void main(字符串[]args){
//创建哈希映射
HashMap=newHashMap();
//填充虚拟游戏条目
对于(int i=0;i<8;i++){
map.put(即“出局”);
}
//将最后两个与游戏中的值相加
地图放置(8,“游戏中”);
地图放置(9,“游戏中”);
//在映射上声明迭代器
迭代器it=map.entrySet().Iterator();
//遇到“游戏中”的时间数
整数检查=0;
//而迭代器还有很多事情要做
while(it.hasNext()){
//获取键值对并打印它们以供检查
//参赛作品
Map.Entry对=(Map.Entry)it.next();
System.out.println(pair.getKey()+“”+pair.getValue());
//如果遇到“游戏中”值,则将检查值增加1
if(pair.getValue().equals(“游戏中”)){
System.out.println(“我们在游戏中有一个玩家”);
check++;
}
//如果多次遇到“游戏中”,则打印警报
如果(检查>1){
System.out.println(“游戏中有多个玩家,出现了问题”);
}
}
//如果只有一个玩家“在游戏中”,请通知我
如果(检查==1){
System.out.println(“我们在游戏中只有一个玩家”);
}
}
}
上面的代码告诉您,有多个玩家的“in-game”属性处于打开状态。如果要检查是否存在任何重复值,最简单的解决方案是将其转储到一个集合中,并将结果大小与原始值进行比较:
boolean hasDuplicates = new HashSet<>(map.values()).size() < map.size();
boolean hasdeplicates=newhashset(map.values()).size()
你考虑过吗?@JoeC我还是个笨蛋,所以我会查一查。谢谢。避免此问题的一种方法是使用名为playerGame
的变量。然后它只能容纳一个玩家(或者零,带有null
),所以我认为BiMap在这里不起作用,因为可以有多个玩家映射到同一个状态,即而不是游戏中的。对我来说,单变量@ChaiT.Rex解决方案似乎是最简单的。这将使访问游戏中的玩家变得非常容易,并强制执行一次只有一个玩家在游戏中。您想只检查一个特定值,还是根本不希望有任何重复的值?我已经在这样做了。但是我如何检查是否只有一个玩家被分配了这个值呢?@Chai T.Rex,tnx。我已经修改了我的应答器过滤器(“在游戏中”::equals)
,或者谓词.isEqual(“在游戏中”)