Java 映射中的空指针异常<;设置<;节点>;,字符串>&燃气轮机;

Java 映射中的空指针异常<;设置<;节点>;,字符串>&燃气轮机;,java,Java,我在找到之前检查了这些值……所有的值都已分配 但我得到了nullpointer异常…如果这是错误的,有人能告诉我如何迭代映射吗 static String findtheregion(Map<Set<Node>, String> rtn1,Node node) { Set<Set<Node>> ls=rtn1.keySet(); Iterator<Set<Node>

我在找到之前检查了这些值……所有的值都已分配 但我得到了nullpointer异常…如果这是错误的,有人能告诉我如何迭代映射吗

static String findtheregion(Map<Set<Node>, String> rtn1,Node node) 
        {
            Set<Set<Node>> ls=rtn1.keySet();
            Iterator<Set<Node>> it=ls.iterator();
            String str;
            while(it.hasNext())
            {
                Set<Node> sn=it.next();
                if(sn.contains(node)){
                    str=rtn1.get(sn);
                return str;}
            }
            return null;
        }
静态字符串查找区域(映射rtn1,节点)
{
设置ls=rtn1.keySet();
迭代器it=ls.Iterator();
字符串str;
while(it.hasNext())
{
Set sn=it.next();
if(序号包含(节点)){
str=rtn1.get(sn);
返回str;}
}
返回null;
}

根据您对问题的评论更新:

如果您的
NullPointerException
是由于从该函数返回的为null造成的,那么问题显然是没有找到匹配的
Set

您的
节点
对象是否正确实现了
equals()
hashCode()
?如果
equals()
hashCode()
被破坏或未定义,大多数
Set
实现(尤其是
HashSet
)将无法工作

原始答案

您为什么不使用新的增强型
for
语法

看起来你要做的是:

static String findTheRegion(Map<Set<Node>, String> rtn1, Node node) {
    for (Map.Entry<Set<Node>, String> entry : rtn1.entrySet()) {
        if (entry.getKey().contains(node)) {
            return entry.getValue();
        }
    }
    return null;
}
静态字符串查找区域(映射rtn1,节点){
对于(Map.Entry:rtn1.entrySet()){
if(entry.getKey()包含(节点)){
返回条目.getValue();
}
}
返回null;
}
我没有看到任何明显的
NullPointerException
发生的地方,但是如果您的
Set
是可变的,我可以很容易地看到此代码的问题。如果集合在用作键时发生更改,它几乎肯定会使所使用的
Map
实现的不变量无效,这可能会产生
NullPointerException


此外,您的数据结构对于您尝试执行的操作没有意义。您是否应该改为使用?

返回时,str的结果为null值…这就是问题所在..我在另一个函数中遇到null指针异常请给我们一个堆栈跟踪,以便我们可以帮助您。如果看不到传入的数据,也看不到堆栈跟踪,那么很难提供帮助。换句话说,这个函数返回null。这可能是因为找不到匹配项。如果该方法返回null,则可能是找不到节点。包括插入值的代码。@user864408:在另一个函数中而不是在这个函数中抛出
NullPointerException
会产生很大的不同。如果你在最初的问题中包含了这些信息,那会更有帮助。