En el estilo funcional de Java8, ¿cómo puedo asignar los valores al par de valores clave ya existentes?

Tengo un mapa:

Map<String, List> dataMap; 

Ahora quiero agregar nuevos pares de valores clave al mapa como a continuación:

 if(dataMap.contains(key)) { List list = dataMap.get(key); list.add(someNewObject); dataMap.put(key, list); } else { List list = new ArrayList(); list.add(someNewObject) dataMap.put(key, list); } 

¿Cómo puedo hacer esto con el estilo funcional de Java8?

Puedes usar computeIfAbsent .

Si la asignación no está presente, solo cree una asociando la clave con una nueva lista vacía y luego agregue el valor en ella.

 dataMap.computeIfAbsent(key, k -> new ArrayList<>()).add(someNewObject); 

Tal como lo indica la documentación, devuelve el valor actual (existente o calculado) asociado con la clave especificada para que pueda encadenar la llamada con ArrayList#add . Por supuesto, supongamos que los valores en el mapa original no son listas de tamaño fijo (no sé cómo lo llenó) …

Por cierto, si tiene acceso a la fuente de datos original, tomaría la transmisión desde allí y usaría Collectors.groupingBy directamente.

Esto se puede simplificar usando el operador ternario. Realmente no necesitas la statement if-else

 List list = dataMap.containsKey(key) ? dataMap.get(key) : new ArrayList<>(); list.add(someNewObject); dataMap.put(key, list);