用Java中的List对象从哈希映射中提取列表

用Java中的List对象从哈希映射中提取列表,java,hashmap,Java,Hashmap,我正在比较两个HashMap,并提取第一个HashMap中的键,而第二个HashMap中没有这些键。这是成功的。我需要提取缺少的键的列表值,我得到的是null。我错过了什么 ChannelsSingleBundle channelSingle = new ChannelsSingleBundle(); //get ChannelSingle Map HashMap<String, List<ChannelSingle>> s

我正在比较两个HashMap,并提取第一个
HashMap
中的键,而第二个
HashMap
中没有这些键。这是成功的。我需要提取缺少的键的列表值,我得到的是null。我错过了什么

        ChannelsSingleBundle channelSingle = new ChannelsSingleBundle();
        //get ChannelSingle Map
        HashMap<String, List<ChannelSingle>> singleChannelsMap = channelSingle.getChannelSinglesData();
        //get Dcti map for Channels Single
        DCTIBundle dctiChannel = new DCTIBundle();
        HashMap<String, List<DCTI>> dctiChannelSingleMap = dctiChannel.getChannelSinglesData();
        //Get keys for channels hash
        HashSet<String> unionKeys = new HashSet(singleChannelsMap.keySet());
        unionKeys.addAll(dctiChannelSingleMap.keySet());
        unionKeys.removeAll(dctiChannelSingleMap.keySet());
        System.out.println("Keys in SiingleMap Not in DCTI Map: \n" + unionKeys);//Gives me the coorect keys
        List<ChannelSingle> singles = new ArrayList<>();
        for (String key : unionKeys) {
            singles =  singleChannelsMap.get(key);//Attempt to get List<ChannelSingle> from the key Pair
        }
        for(ChannelSingle single: singles){
            System.out.println(single.getHostRefNumber());
        }
ChannelsSingleBundle channelSingle=新的ChannelsSingleBundle();
//获取单一映射
HashMap singleChannelsMap=channelSingle.getChannelSinglesData();
//获取单个通道的Dcti映射
DCTIBundle dctiChannel=新的DCTIBundle();
HashMap dctiChannelSingleMap=dctiChannel.getChannelSinglesData();
//获取通道哈希的密钥
HashSet unionKeys=新的HashSet(singleChannelsMap.keySet());
unionKeys.addAll(dctiChannelSingleMap.keySet());
unionKeys.removeAll(dctiChannelSingleMap.keySet());
System.out.println(“SiingleMap中的键不在DCTI映射中:\n”+unionKeys)//给我钥匙
List singles=new ArrayList();
for(字符串键:unionKeys){
singles=singleChannelsMap.get(key);//尝试从密钥对获取列表
}
用于(单声道:单声道){
System.out.println(single.getHostRefNumber());
}

编辑:如注释中所示,getHhostRefNumber确实为空。现在的问题是,该列表应该有更多的记录。我需要记录等同于unionKeys中的密钥数。

您可以尝试以下代码:

        ChannelsSingleBundle channelSingle = new ChannelsSingleBundle();
        //get ChannelSingle Map
        HashMap<String, List<ChannelSingle>> singleChannelsMap = channelSingle.getChannelSinglesData();
        //get Dcti map for Channels Single
        DCTIBundle dctiChannel = new DCTIBundle();
        HashMap<String, List<DCTI>> dctiChannelSingleMap = dctiChannel.getChannelSinglesData();
        //Get keys for channels hash
        HashSet<String> unionKeys = new HashSet(singleChannelsMap.keySet());

        // You do not need to add these keys
        // unionKeys.addAll(dctiChannelSingleMap.keySet());  

        unionKeys.removeAll(dctiChannelSingleMap.keySet());
        System.out.println("Keys in SiingleMap Not in DCTI Map: \n" + unionKeys);//Gives me the coorect keys
        List<ChannelSingle> singles = new ArrayList<>();
        for (String key : unionKeys) {
            singles =  singleChannelsMap.get(key);//Attempt to get List<ChannelSingle> from the key Pair

            for(ChannelSingle single: singles){
                System.out.println(single.getHostRefNumber());
            }
        }
ChannelsSingleBundle channelSingle=新的ChannelsSingleBundle();
//获取单一映射
HashMap singleChannelsMap=channelSingle.getChannelSinglesData();
//获取单个通道的Dcti映射
DCTIBundle dctiChannel=新的DCTIBundle();
HashMap dctiChannelSingleMap=dctiChannel.getChannelSinglesData();
//获取通道哈希的密钥
HashSet unionKeys=新的HashSet(singleChannelsMap.keySet());
//您不需要添加这些键
//unionKeys.addAll(dctiChannelSingleMap.keySet());
unionKeys.removeAll(dctiChannelSingleMap.keySet());
System.out.println(“SiingleMap中的键不在DCTI映射中:\n”+unionKeys)//给我钥匙
List singles=new ArrayList();
for(字符串键:unionKeys){
singles=singleChannelsMap.get(key);//尝试从密钥对获取列表
用于(单声道:单声道){
System.out.println(single.getHostRefNumber());
}
}

getHostRefNumber是否因为为null而总是提供null?尝试其他属性assingment
singles=singleChannelsMap.get(key)
对我来说没有意义。您正在循环所有键,因此
singles
仅包含最后一个键的列表。最后一个键是否有可能引用了一个
单个
,它的
hostRefNumber
实际上是
null
?没错,hostRefNum为null,但列表中的对象比预期的多。这与我得到的相同结果没有区别
null
主机参考号实际上不是问题所在,因为源代码中的值已经为null。我的问题是,如果我的
unionKeys
的大小为20,我希望
列表
为20,并且我正在按键从
singleChannelsMap
获取值。您可以通过在unionKeys for loop中写入键来检查这一点。因为若列表为空,则第二个for循环不起作用(singles循环)。