繁体   English   中英

比较多维HashMap的键

[英]Comparing keys of a multi-dimensional HashMap

我正在使用具有许多自定义数据类的应用程序。 我正在从2个不同的地方获取我的应用程序的输入,并希望在这两个位置之间进行交叉引用以帮助确保数据的准确性。

我有一个名为chromosomeMap.Entry<String,HashMap<String, Integer>>对象,其中每个值称为一个marker

我还有一个自定义对象,称为IndividualList individuals ,该对象扩展了HashMap<Integer,Individual> ,其中每个Individual都有一个方法Genotype getGenotype() ,该方法返回非静态变量genotype Genotype扩展了HashMap<String,String[]>

我想看看每个key我所有的marker物,并检查他们每个人是否存在如在任何一个关键Individualgenotype 每个Individualgenotype都有相同的密钥,因此我只需要测试一个Individual

我面临的问题是要测试的Individual ,因为它是一个HashMap所以我不能简单地随意选择第一个元素,所以我目前正在做的工作是将individuals的值作为一个Collection然后将它们转换为ArrayList<Individual>然后取第一这些元素(其仅仅是一个任意一个作为HashMap是无序的),以获得一个Individual然后采取这一Individualgenotype和比较marker.getKey()与在所述键genotype 像这样:

for(Map.Entry<String, MarkerPosition> marker : chromosome.getValue().entrySet())
    if(!(new ArrayList<Individual>(individuals.values()).get(0)
                    .getGenotype().containsKey(marker.getKey())))
            errors.add("Marker " + marker.getKey() + " is not present in genotype");

但是,正如您所看到的那样,这是可怕的,丑陋的,而且过于复杂,因此我想知道是否有一种更简单的方法来实现我所缺少的目标。

谢谢!

...这个问题的措辞确实令人困惑,难以理解,但我不清楚您为什么不仅仅使用

 individuals.values().iterator().next()

而不是new ArrayList<Individual>(individuals.values()).get(0)

(如果可以使用第三方库,则如果使用Guava Table ,则代码总体上可能会更加清晰明了,Guava TableMap<K1, Map<K2, V>>的通用,明显的“清洁”替代品。披露:我为番石榴做出了贡献。)

为什么不能随意选择HashMap的第一个元素?

individuals.entrySet().iterator().next()
individuals.values().iterator().next()

每次都可能是同一条目。 您应确保映射不为空以避免出现异常。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM