Vorrei unire due Mappa con JAVA 8 Stream:Unisci Map <String, Lista <String> Java 8 Streaming
Map<String, List<String>> mapGlobal = new HashMap<String, List<String>>();
Map<String, List<String>> mapAdded = new HashMap<String, List<String>>();
Io cerco di usare questa implementazione:
mapGlobal = Stream.of(mapGlobal, mapAdded)
.flatMap(m -> m.entrySet().stream())
.collect(Collectors.groupingBy(Map.Entry::getKey,
Collectors.mapping(Map.Entry::getValue,
Collectors.toList())
));
Tuttavia, questa implementazione solo creare un risultato come:
Map<String, List<Object>>
Se una chiave non è contenuta nello mapGlobal
, verrà aggiunta come una nuova chiave con l'elenco di stringhe corrispondente. Se la chiave è duplicata in mapGlobal
e mapAdded
, entrambi gli elenchi di valori saranno uniti come: A = {1, 3, 5, 7}
e B = {1, 2, 4, 6}
quindi A ∪ B = {1, 2, 3, 4, 5, 6, 7}
.
questa implementazione non utilizzerà i miglioramenti nelle raccolte di flussi. Entrambe le mappe possono essere enormi, quindi mi piacerebbe usare qualcosa come parallelStream(). È possibile. – ypriverol
@ypriverol Sì, è possibile, ho modificato con quello. – Tunaki
A meno che 'mapGlobal' sia un' ConcurrentMap', la sua mutazione all'interno di un flusso parallelo non è sicuro. – Misha