0

我正在开发一个包含许多自定义数据类的应用程序。我从 2 个不同的地方为我的应用程序输入输入,并希望在两者之间进行交叉引用以帮助确保数据准确。

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

我还有一个名为的自定义对象IndividualList individuals,它扩展HashMap<Integer,Individual>了每个对象Individual都有一个Genotype getGenotype()返回非静态变量的方法genotypeGenotype延伸HashMap<String,String[]>

我想查看key我的所有marker对象的每一个,并检查它们中的每一个是否都作为 key 存在于任何 Individual'sgenotype中。每个Individual都有相同的键,genotype所以我只需要测试一个Individual

我面临的问题是Individual要测试哪个,因为它是一个HashMap我不能简单地随意选择第一个元素,所以我现在正在做的是将这些值individuals作为 aCollection然后将它们转换为ArrayList<Individual>然后取第一个元素这些元素(这只是一个无序的任意元素)HashMap得到一个Individual然后取 thisIndividualgenotype与. 像这样: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");

但正如你所看到的,这是可怕的、丑陋的,而且太复杂了,所以我想知道是否有一种更简单的方法来实现我所缺少的我想要的东西。

谢谢!

4

2 回答 2

0

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

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

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

(如果您可以使用第三方库,那么如果您使用 Guava Table,您的代码可能会整体上更加清晰,这是一个通用的、明显“更干净”的替代品Map<K1, Map<K2, V>>。披露:我为 Guava 做出了贡献。)

于 2012-07-03T14:44:26.077 回答
0

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

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

这可能每次都是相同的条目。您应该确保地图不为空以避免异常。

于 2012-07-03T14:45:05.413 回答