Sou i
Cada chave tem apenas um valor associado, esse valor associado vai depender do segundo tipo de classe que você passou entre o operador diamond <>
No exemplo que você passou aqui, você espera uma chave do tipo K e valor do tipo C
Sim, cada chave esta associada a um valor, entretanto, o mesmo valor pode estar associado a chaves distintas, ou seja, as únicas coisas distintas são as chaves.
Não, pois antes tem que verificar se a chave existe:
O algoritimo fornecido é:
adicione o valor v na coleção associada à chave k. Caso a chave não exista, deverá ser pedida uma coleção ao fornecedor c, à qual é adicionado o valor, e o par contendo k e a coleção obtida de c é colocado em m
Salvo interpretação distinta temos:
- Adicione o valor v na coleção (existente e) associada à chave k.
- Caso a chave não exista, deverá ser pedida uma coleção ao fornecedor(Supplier) c.
- À (Coleção obtida por meio de c) … é adicionado o valor (v).
- O par contendo k(a chave) e a coleção(valor) obtida de c é colocado em m (mapa).
Desenvolvendo:
/**
* K chave do mapa m
* C valor do mapa m, sendo uma coleção C<V>
* @param c fornecedor de coleções C<V>
* @param v objeto que compõe a coleção C<V>
* a interface Supplier<T> é do tipo funcional, tem apenas o método T get() e fornece uma coleção C<V>;
*/
void add( Map<K,C> m, K k, V v, Supplier<C> c){
if (m.containsKey(k)) {
m.get(k).add(v);// condição 1 atendida
}else{
C novaColecao = c.get();// condição 2 satisfeita
novaColecao.add(v);//condição 3 satisfeita
m.put(k, novaColecao);//condição 4 satisfeita
}
}
Fiquei muito mais esclarecido. Obrigado
Os erros que vc apontou estão relacionado à implementação da classe C sem a utilização de generics.
C extends Collection// errado
public class C implements Collection<V>{
//...
}