Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何检查hashmap中具有特定值的键数_Java_Hashmap - Fatal编程技术网

Java 如何检查hashmap中具有特定值的键数

Java 如何检查hashmap中具有特定值的键数,java,hashmap,Java,Hashmap,我想弄明白的是,如何检查hashmap(在我的例子中,它可以有任意数量的键)是否只有一个特定值被分配给它。我正在努力解释这一点 如果我有一个有10个键的hashmap(每个键都是游戏中的玩家,根据他们所处的“游戏状态”分配有一个游戏状态),并且在_游戏中只有一个玩家具有游戏状态,那么我如何检查实际上只有一个键被分配了_游戏中的值,没有两个键具有该值?使用streams: Map<String, String> data = new HashMap<>(); // addi

我想弄明白的是,如何检查hashmap(在我的例子中,它可以有任意数量的键)是否只有一个特定值被分配给它。我正在努力解释这一点

如果我有一个有10个键的hashmap(每个键都是游戏中的玩家,根据他们所处的“游戏状态”分配有一个游戏状态),并且在_游戏中只有一个玩家具有游戏状态,那么我如何检查实际上只有一个键被分配了_游戏中的值,没有两个键具有该值?

使用streams:

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(“在游戏中”)