2015-11-16 11 views
5

Cerco di unire due mappemergeMaps non funziona quando la prima mappa non ha elementi?

 private void mergeMaps(HashMap<String, FailureExample> current, 
          HashMap<String, FailureExample> other) { 

     current.forEach((k, v) -> other.merge(k, v, 
       (v1, v2) -> { 
        FailureExample answer = new FailureExample(); 

        addFromListWithSizeLimit(v1, answer); 
        addFromListWithSizeLimit(v2, answer); 

//     answer.requests.addAll(v1.requests); 
//     answer.requests.addAll(v2.requests); 
        return answer; 
       })); 
    } 

ma quando la corrente ha 0 elementi, il lambda non viene eseguito.

L'unione non dovrebbe essere eseguita nel caso in cui non sia possibile un'unione?

voglio:

map1{} ; map2{<a,<a1>>} returns map3{<a,<a1>>} 

map1{<a,<b1>>} ; map2{<a,<a1>>} returns map3{<a,<a1, b1>>} 
+0

dimenticare che si sta tentando di unire le mappe per un secondo, e immaginate di chiamare 'forEach' su una lista vuota: quante volte avrebbe il lambda essere eseguito? –

+0

Oltre al fatto che stai modificando la mappa 'other', in altre parole,' map2' e 'map3' sono identici, il codice fa esattamente ciò che descrivi. Non è chiaro il motivo per cui ti aspetti qualcosa di diverso e per quale motivo. Quando entrambe le mappe hanno chiavi disgiunte, l'espressione lambda non verrà eseguita neanche. – Holger

risposta

1

Se si chiama forEach su un insieme vuoto, non c'è ovviamente nulla su cui eseguire la lambda.

Se HashMap.merge è il modo in cui si desidera unire le liste, si potrebbe scambiare il round mappe nel caso in cui la prima è vuota:

if (current.isEmpty()) { 
    HashMap<String, FailureExample> tmp = current; 
    current = other; 
    other = tmp; 
} 

Tuttavia, che si aggiungerà elementi al other, piuttosto che current .

In alternativa, si può semplicemente putAll tutto nella prima mappa:

if (current.isEmpty()) { 
    current.putAll(other); 
} 
+0

ma poi di nuovo non aggiungerà elementi che non sono nel for-each. Significa oggetti nella mappa "altro". –

Problemi correlati