Um Map é uma estrutura de dados para armazenar pares de chave-valor. É semelhante aos dicionários de outras linguagens de programação. A interface Map define operações sobre um Map.
O Java tem várias implementações diferentes de Map. O HashMap é uma das mais utilizadas.
// Make an instance
Map<String, Integer> fruitPrices = new HashMap<>();
Adiciona entradas ao Map com o put.
fruitPrices.put("apple", 100);
fruitPrices.put("pear", 80);
// => { "apple" => 100, "pear" => 80 }
Só se pode associar um valor a cada chave.
Chamar o put com a mesma chave atualiza o valor dessa chave.
fruitPrices.put("pear", 40);
// => { "apple" => 100, "pear" => 40 }
Usa o get para obter o valor de uma chave.
fruitPrices.get("apple"); // => 100
Usa o containsKey para verificar se o Map contém uma determinada chave.
fruitPrices.containsKey("apple"); // => true
fruitPrices.containsKey("orange"); // => false
Remove entradas com o remove.
fruitPrices.put("plum", 90); // Add plum to map
fruitPrices.remove("plum"); // Removes plum from map
O método size devolve o número de entradas.
fruitPrices.size(); // Returns 2
Podes usar os métodos keySet ou values para obter as chaves ou os valores de um Map como um Set ou uma coleção, respetivamente.
fruitPrices.keySet(); // Returns "apple" and "pear" in a set
fruitPrices.values(); // Returns 100 and 80, in a Collection
Neste exercício vais escrever código para gerir um dicionário de indicativos internacionais usando um Map.
O dicionário permite procurar o nome de um país (o valor do mapa, como String) através do indicativo internacional (a chave do mapa, como Integer).
Implementa o método getCodes, que não recebe parâmetros e devolve um mapa que associa os indicativos aos países que estão atualmente no dicionário.
DialingCodes dialingCodes = new DialingCodes();
dialingCodes.getCodes();
// => empty map
É preciso preencher o dicionário.
Implementa o método setDialingCode, que recebe um indicativo e o país correspondente e adiciona o indicativo e o país.
Se o indicativo já estiver no mapa, atualiza o mapa com o indicativo e o país fornecidos.
DialingCodes dialingCodes = new DialingCodes();
dialingCodes.setDialingCode(679, "Unknown");
// => { 679 => "Unknown" }
dialingCodes.setDialingCode(679, "Fiji");
// => { 679 => "Fiji" }
Implementa o método getCountry, que recebe um indicativo e devolve o nome do país correspondente ao indicativo.
DialingCodes dialingCodes = new DialingCodes();
dialingCodes.setDialingCode(55, "Brazil");
dialingCodes.getCountry(55);
// => "Brazil"
Ao adicionar um indicativo, é preciso ter cuidado para impedir que um indicativo ou um país seja adicionado duas vezes.
Nas situações em que isto acontece, pode assumir-se que a primeira entrada é a entrada correta.
Implementa o método addNewDialingCode, que adiciona uma entrada para o indicativo e o país indicados.
No entanto, ao contrário de setDialingCode, não faz nada se o indicativo ou o país já estiverem no mapa.
DialingCodes dialingCodes = new DialingCodes();
dialingCodes.addNewDialingCode(32, "Belgium");
dialingCodes.addNewDialingCode(379, "Vatican City");
// => { 32 => "Belgium", 379 => "Vatican City" }
dialingCodes.addNewDialingCode(32, "Other");
dialingCodes.addNewDialingCode(39, "Vatican City");
// => { 32 => "Belgium", 379 => "Vatican City" }
É raro, mas podem cometer-se erros.
Para corrigir o erro, vamos precisar de saber qual é o indicativo a que o país está atualmente associado.
Para descobrir qual indicativo precisa de ser corrigido, implementa o método findDialingCode, que recebe um país e devolve o indicativo desse país.
Devolve null se o país não estiver no mapa.
DialingCodes dialingCodes = new DialingCodes();
dialingCodes.addDialingCode(44, "UK");
dialingCodes.findDialingCode("UK");
// => 44
dialingCodes.findDialingCode("Unlisted");
// => null
Agora que sabemos qual indicativo precisa de ser corrigido, vamos atualizar o indicativo.
Implementa o método updateCountryDialingCode, que recebe o novo indicativo do país e o nome do país e atualiza em conformidade.
Não faças nada se o país não estiver no mapa (uma vez que este método serve apenas para ajudar a corrigir erros).
DialingCodes dialingCodes = new DialingCodes();
dialingCodes.addDialingCode(88, "Japan");
// => { 88 => "Japan" }
dialingCodes.updateCountryDialingCode(81, "Japan");
// => { 81 => "Japan" }
dialingCodes.updateCountryDialingCode(32, "Mars");
// => { 81 => "Japan"}
Inscreve-te no Exercism para aprenderes e dominares Java com 26 conceitos158 exercícios, e mentoria humana real, tudo grátis.