value - treemap java o que é




No estilo funcional Java8, como posso mapear os valores para o par de valores-chave já existente (2)

Eu tenho um mapa:

Map<String, List<Object>> dataMap;

Agora eu quero adicionar novos pares de valores-chave ao mapa, como abaixo:

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

Como posso fazer isso com o estilo funcional Java8?


Isso pode ser simplificado usando o operador ternário. Você realmente não precisa da instrução if-else

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

Você pode usar computeIfAbsent .

Se o mapeamento não estiver presente, basta criar um associando a chave a uma nova lista vazia e, em seguida, adicione o valor nela.

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

Como a documentação declara, ele retorna o valor atual (existente ou calculado) associado à chave especificada para que você possa encadear a chamada com ArrayList#add . Obviamente, isso pressupõe que os valores no mapa original não sejam listas de tamanho fixo (não sei como você o preencheu) ...

A propósito, se você tiver acesso à fonte de dados original, eu pegaria o fluxo e usaria Collectors.groupingBy diretamente.







java-8