0

多数のカスタム データ クラスを使用するアプリケーションに取り組んでいます。アプリケーションの入力を 2 つの異なる場所から取得しており、データが正確であることを確認するために 2 つの場所を相互参照したいと考えています。

というMap.Entry<String,HashMap<String, Integer>>オブジェクトがchromosomeあり、各値は と呼ばれますmarker

また、それぞれが非静的変数を返すメソッドを持つ場所IndividualList individualsを拡張するというカスタム オブジェクトもあります。伸びるHashMap<Integer,Individual>IndividualGenotype getGenotype()genotypeGenotypeHashMap<String,String[]>

keyすべてのオブジェクトのそれぞれを見て、それらのそれぞれがいずれかmarkerキーとして存在するかどうかを確認したいと思います。すべてに同じキーが含まれているため、テストする必要があるのは 1 つだけです。 IndividualgenotypeIndividualgenotypeIndividual

私が直面している問題はIndividual、どちらをテストするかです。最初の要素を単に恣意的に選択することはできHashMapないため、現在行っていることは、の値individualsをこれらの要素 (順序付けされていないため、任意のものです) を取得して、thisを取得し、のキーと比較します。そのようです :CollectionArrayList<Individual>HashMapIndividualIndividualgenotypemarker.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 に答える