どのように私はHashMapを考慮forループで追加チェックを使用することができますか?

ハミ:

私は2つのハッシュマップを作成していると私は、forループと同じ内部にそれらの両方を反復します。

HashMap<String,Double> hashmapA = new HashMap<>();
HashMap<String,Double> hashmapB = new HashMap<>();

だから、私は内の要素反復場合はhashmapA、次のように:

for(String map1:hashmapA.keyset()){
...
}

どのように私はの値を繰り返すことができhashmapB、同じループ内で?実は、私は内側のループを使用する必要はありません。

Dnlst:

あなただけのすべてのキーを反復処理したい場合は:

ただ、新しい作成するHashSet最初の鍵のうちのMap第二のキーを追加しますMap

Collection<Map.Entry<String,Double>> entries=new HashSet<>(hashmapA.entrySet());
keys.addAll(hashmapB.entrySet());
for(Map.Entry<String,Double> entry:entries){
    String key=entry.getKey();
    Double value=entry.getValue();
    ...
}

これはまた、Java 8 Streamsを使用して行うことができます。

for(Map.Entry<String,Double> entry: Stream.concat(hashmapA.entrySet().stream(),hashmapB.entrySet().stream()){
     String key=entry.getKey();
    Double value=entry.getValue();
    ...
}

あなただけのマップの交差点をしたい場合は、使用することができます。

Collection<String> keys=new HashSet<>(hashmapA.keySet());
keys.retainAll(hashmapB.keySet());
for(String key:keys){
    Double aValue=hashmapA.get(key);
    Double bValue=hashmapB.get(key);
    ...
}

または(Streamsを使用しました):

for(String key: hashmapA.entrySet().stream().filter(k->hashmapB.containsKey(k))){
    Double aValue=hashmapA.get(key);
    Double bValue=hashmapB.get(key);
    ...
}

@としてbsaverinoコメントで次のように述べました。

最新の発言@Hamiはその後、ちょうどのキーを反復処理についてhashmapA及び使用はhashmapB.containsKey(...)十分だったかもしれません。

以下はまた、あなたのケースで動作します:

for(String key:hashmapA.keySet()){
    if(hashmapB.containsKey(key){
        Double aVal=hashmapA.get(key);
        Double bVal=hashmapB.get(key);
    }
}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=28459&siteId=1