O Que É Map?
Vamos discutir a interface Map em Java. A interface Map faz parte do framework de Coleções do Java e define métodos para trabalhar com dados na forma de pares chave-valor.
Vamos analisar a definição:
A implementação principal dessa estrutura de dados em Java é o HashMap, que implementa a interface Map. Vamos explorar os principais métodos e os princípios de funcionamento dessa implementação.
Começaremos com a declaração e métodos:
Main.java
1Map<K, V> map = new HashMap<>();
Aqui, você vê que nos genéricos ou colchetes em forma de diamante, dois valores são especificados:
- O valor
Kcorresponde ao tipo de dado da chave; - O valor
Vcorresponde ao tipo de dado do valor.
Assim, ao declarar essa estrutura de dados, indicamos os tipos de dados dos nossos valores chave-valor.
Agora, vamos analisar os métodos definidos na interface Map.
Métodos
V put(K key, V value): associa o valor especificado à chave especificada neste Map. Se o Map já continha um mapeamento para a chave, o valor antigo é substituído.
Main.java
1234567891011121314package com.example; import java.util.HashMap; import java.util.Map; public class Main { public static void main(String[] args) { Map<Integer, String> map = new HashMap<>(); map.put(1, "One"); map.put(2, "Two"); map.put(3, "Three"); System.out.println(map); } }
V get(Object key): retorna o valor ao qual a chave especificada está mapeada, ou null se este Map não contiver mapeamento para a chave.
Aqui é onde especificamos a chave para obter o valor correspondente.
Vamos recuperar o valor com a chave 2:
Main.java
12345678910111213141516package com.example; import java.util.HashMap; import java.util.Map; public class Main { public static void main(String[] args) { Map<Integer, String> map = new HashMap<>(); map.put(1, "One"); map.put(2, "Two"); map.put(3, "Three"); System.out.println("Map: " + map); String value = map.get(2); System.out.println("Value: " + value); } }
-
boolean containsKey(Object key): retornatruese oMapcontiver um mapeamento para a chave especificada; -
boolean containsValue(Object value): retornatruese oMapcontiver uma ou mais chaves mapeadas para o valor especificado.
Esses dois métodos são claramente relacionados e ajudam a determinar se o Map especificado contém as chaves ou valores desejados. Esses métodos são convenientes para uso em condições, pois retornam valores boolean.
Vamos analisar um exemplo:
Main.java
12345678910111213141516171819202122232425package com.example; import java.util.HashMap; import java.util.Map; public class Main { public static void main(String[] args) { Map<Integer, String> map = new HashMap<>(); map.put(1, "One"); map.put(2, "Two"); map.put(3, "Three"); System.out.println("Map: " + map); if (map.containsKey(2)) { System.out.println("Value with key 2: " + map.get(2)); } else { System.out.println("There is no value with key 2!"); } if (map.containsValue("Four")) { System.out.println(map.get(4)); } else { System.out.println("There is no key with value \"Four\"!"); } } }
No exemplo acima, verifica-se a presença de uma chave e a presença de um valor no Map. Se os valores forem encontrados, eles são exibidos no console. Caso não existam tais valores, são exibidas mensagens indicando a ausência desses dados.
-
boolean isEmpty(): retornatruese esteMapnão contiver mapeamentos de chave-valor; -
V remove(Object key): remove o mapeamento para a chave especificada desteMap, se presente, e retorna o valor anterior.
Assim como em outras estruturas de dados, é possível remover elementos do Map.
Main.java
12345678910111213141516package com.example; import java.util.HashMap; import java.util.Map; public class Main { public static void main(String[] args) { Map<Integer, String> map = new HashMap<>(); map.put(1, "One"); map.put(2, "Two"); map.put(3, "Three"); System.out.println("Map: " + map); String removedElement = map.remove(3); System.out.println("Removed value: " + removedElement + ".\nMap after the removal operation: " + map); } }
Assim, é possível remover elementos pela chave.
Métodos Básicos para Gerenciar Maps
A seguir, estão métodos com os quais você já está familiarizado, que listarei sem exemplos. Mas ainda restam métodos interessantes.
Vamos começar pelo básico:
-
void clear(): remove todos os elementos doMap; -
int size(): retorna o número de associações chave-valor nesteMap; -
void putAll(Map<? extends K, ? extends V> m): copia todas as associações doMapespecificado para esteMap.
Agora, vamos para os métodos que retornam uma coleção com valores (ou chaves) do Map. Ou seja, extraímos da estrutura de dados uma estrutura chave-valor que armazena apenas valores (ou chaves).
Por exemplo, ArrayList<>.
Main.java
12345678910111213141516package com.example; import java.util.*; public class Main { public static void main(String[] args) { Map<Integer, String> map = new HashMap<>(); map.put(1, "One"); map.put(2, "Two"); map.put(3, "Three"); System.out.println("Map: " + map); Collection<String> list; list = map.values(); System.out.println("Values" + list); } }
Aqui, obtivemos uma coleção de valores do Map.
Agora, é possível transferir essa coleção para um ArrayList:
Main.java
123456789101112131415161718package com.example; import java.util.*; public class Main { public static void main(String[] args) { Map<Integer, String> map = new HashMap<>(); map.put(1, "One"); map.put(2, "Two"); map.put(3, "Three"); System.out.println("Map: " + map); Collection<String> collection; collection = map.values(); System.out.println("Values" + collection); List<String> arrayList = new ArrayList<>(collection); System.out.println("ArrayList: " + arrayList); } }
Inicialização de um ArrayList utilizando valores provenientes do Map.
Existe também um método que retorna as chaves do Map. No entanto, essas chaves serão retornadas na forma de uma estrutura chamada Set. Não abordaremos essa estrutura de dados neste momento; vale ressaltar que um Set é uma estrutura de dados que contém exclusivamente valores únicos.
Veja este método:
Set<K> keySet(): retorna uma visão do tipo Set das chaves contidas neste Map.
Main.java
12345678910111213141516package com.example; import java.util.*; public class Main { public static void main(String[] args) { Map<Integer, String> map = new HashMap<>(); map.put(1, "One"); map.put(2, "Two"); map.put(3, "Three"); System.out.println("Map: " + map); Set<Integer> keys; keys = map.keySet(); System.out.println("Keys: " + keys); } }
Assim, também podemos obter um conjunto de todas as chaves do Map.
Bem, parece que finalizamos os métodos. Agora, vamos analisar o uso do Map, bem como exemplos práticos:
Uso do Map
Uma estrutura como chave-valor possui diversas aplicações práticas. Vamos considerar a mais simples dessas estruturas: um sistema de notas de alunos.
Vamos criar um Map onde a chave é do tipo String, representando o nome do aluno, e o valor é do tipo Integer, representando a nota do aluno. Dessa forma, é possível atribuir notas aos alunos e recuperar facilmente a nota de um aluno específico utilizando a chave:
Main.java
12345678910111213141516package com.example; import java.util.*; public class Main { public static void main(String[] args) { Map<String, Integer> studentsGrades = new HashMap<>(); studentsGrades.put("Bob", 9); studentsGrades.put("Alice", 8); studentsGrades.put("Mike", 5); studentsGrades.put("John", 10); studentsGrades.put("Martin", 7); studentsGrades.put("Peter", 5); System.out.println("Student's grades: " + studentsGrades); } }
Agora, imagine que precisamos recuperar as notas de Mike e Alice, e então compará-las. Isso pode ser facilmente realizado utilizando os métodos que você aprendeu acima. Vamos implementar isso no código:
Main.java
123456789101112131415161718192021package com.example; import java.util.*; public class Main { public static void main(String[] args) { Map<String, Integer> studentsGrades = new HashMap<>(); studentsGrades.put("Bob", 9); studentsGrades.put("Alice", 8); studentsGrades.put("Mike", 5); studentsGrades.put("John", 10); studentsGrades.put("Martin", 7); studentsGrades.put("Peter", 5); System.out.println("Student's grades: " + studentsGrades); Integer mikeGrade = studentsGrades.get("Mike"); Integer aliceGrade = studentsGrades.get("Alice"); System.out.println(mikeGrade.compareTo(aliceGrade) == -1 ? "Alice's grade is higher": "Mike's grade is higher"); } }
O operador ternário e o método compareTo() da classe wrapper Integer foram utilizados. Caso não entenda como funciona, pode ser explicado da seguinte forma:
Main.java
12345678910111213141516171819202122232425package com.example; import java.util.*; public class Main { public static void main(String[] args) { Map<String, Integer> studentsGrades = new HashMap<>(); studentsGrades.put("Bob", 9); studentsGrades.put("Alice", 8); studentsGrades.put("Mike", 5); studentsGrades.put("John", 10); studentsGrades.put("Martin", 7); studentsGrades.put("Peter", 5); System.out.println("Student's grades: " + studentsGrades); Integer mikeGrade = studentsGrades.get("Mike"); Integer aliceGrade = studentsGrades.get("Alice"); if (mikeGrade.compareTo(aliceGrade) == -1) { System.out.println("Alice's grade is higher"); } else { System.out.println("Mike's grade is higher"); } } }
Agora, considere o seguinte: e se for solicitado reunir todos os alunos com nota superior a 7 (excluindo 7)? Isso se torna interessante, e agora vou explicar como fazer isso!
Iteração através do Map
A iteração sobre elementos em um Map em Java pode ser realizada utilizando vários métodos fornecidos pela interface Map e suas implementações. Aqui estão algumas formas de iterar sobre um Map:
Iterando sobre as chaves (keySet()): o método keySet() retorna um conjunto de todas as chaves no Map. É possível utilizar esse conjunto para iterar sobre as chaves e recuperar os valores correspondentes.
Main.java
12345678910111213141516package com.example; import java.util.*; public class Main { public static void main(String[] args) { Map<String, Integer> map = new HashMap<>(); map.put("Key1", 1); map.put("Key2", 2); for (String key : map.keySet()) { Integer value = map.get(key); System.out.println("Key: " + key + ", Value: " + value); } } }
Iteração sobre valores (values()): o método values() retorna uma coleção de todos os valores no Map. Esta coleção pode ser utilizada para iterar sobre os valores.
Main.java
123456789101112131415package com.example; import java.util.*; public class Main { public static void main(String[] args) { Map<String, Integer> map = new HashMap<>(); map.put("Key1", 1); map.put("Key2", 2); for (Integer value : map.values()) { System.out.println("Value: " + value); } } }
Iteração sobre pares chave-valor (entrySet()): o método entrySet() retorna um conjunto de objetos Map.Entry que representam pares chave-valor. Isso permite iterar diretamente sobre os pares.
Main.java
1234567891011121314151617package com.example; import java.util.*; public class Main { public static void main(String[] args) { Map<String, Integer> map = new HashMap<>(); map.put("Key1", 1); map.put("Key2", 2); for (Map.Entry<String, Integer> entry : map.entrySet()) { String key = entry.getKey(); Integer value = entry.getValue(); System.out.println("Key: " + key + ", Value: " + value); } } }
Vamos nos aprofundar um pouco mais nisso. Inicialmente, pode parecer extremamente complexo de entender, mas não é necessário se preocupar com os detalhes de como funciona, pois a sintaxe é sempre a mesma.
Map.Entry<K, V> entry : map.entrySet()
Utilizando o objeto entry, é possível acessar tanto a chave quanto o valor no Map simultaneamente. Agora, vamos resolver a tarefa apresentada anteriormente usando o entry set: recuperar todos os alunos com nota maior que 7. Para isso, será feita uma verificação com entry.getValue(), e ao encontrar alunos adequados, suas chaves serão adicionadas a um ArrayList previamente criado:
Main.java
1234567891011121314151617181920212223242526package com.example; import java.util.*; public class Main { public static void main(String[] args) { Map<String, Integer> studentsGrades = new HashMap<>(); studentsGrades.put("Bob", 9); studentsGrades.put("Alice", 8); studentsGrades.put("Mike", 5); studentsGrades.put("John", 10); studentsGrades.put("Martin", 7); studentsGrades.put("Peter", 5); System.out.println("Student's grades: " + studentsGrades); List<String> studentsWithGradeHigherThanSeven = new ArrayList<>(); for (Map.Entry<String, Integer> entry : studentsGrades.entrySet()) { if (entry.getValue() > 7) { studentsWithGradeHigherThanSeven.add(entry.getKey()); } } System.out.println(studentsWithGradeHigherThanSeven); } }
Assim, é possível iterar pelo Map e encontrar a lista desejada de estudantes que foram aprovados no exame!
O entry set é uma ferramenta muito útil, pois permite diversas formas de iterar pelo Map usando um loop, tendo acesso tanto à chave quanto ao valor.
No próximo capítulo, vamos explorar como o HashMap, que utilizamos tão ativamente neste capítulo, realmente funciona!
1. Qual interface em Java representa uma coleção de pares chave-valor?
2. Como iterar por todas as chaves em um Map usando um loop for-each?
3. Qual é o propósito do método values() em um Map?
4. Qual método é utilizado para verificar se uma chave específica está presente em um Map?
5. Qual método é utilizado para remover um par chave-valor de um Map em Java?
Obrigado pelo seu feedback!
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo
Can you explain more about how HashMap handles collisions?
What are some other implementations of the Map interface besides HashMap?
Can you provide more practical examples of using Map in Java?
Incrível!
Completion taxa melhorada para 4
O Que É Map?
Deslize para mostrar o menu
Vamos discutir a interface Map em Java. A interface Map faz parte do framework de Coleções do Java e define métodos para trabalhar com dados na forma de pares chave-valor.
Vamos analisar a definição:
A implementação principal dessa estrutura de dados em Java é o HashMap, que implementa a interface Map. Vamos explorar os principais métodos e os princípios de funcionamento dessa implementação.
Começaremos com a declaração e métodos:
Main.java
1Map<K, V> map = new HashMap<>();
Aqui, você vê que nos genéricos ou colchetes em forma de diamante, dois valores são especificados:
- O valor
Kcorresponde ao tipo de dado da chave; - O valor
Vcorresponde ao tipo de dado do valor.
Assim, ao declarar essa estrutura de dados, indicamos os tipos de dados dos nossos valores chave-valor.
Agora, vamos analisar os métodos definidos na interface Map.
Métodos
V put(K key, V value): associa o valor especificado à chave especificada neste Map. Se o Map já continha um mapeamento para a chave, o valor antigo é substituído.
Main.java
1234567891011121314package com.example; import java.util.HashMap; import java.util.Map; public class Main { public static void main(String[] args) { Map<Integer, String> map = new HashMap<>(); map.put(1, "One"); map.put(2, "Two"); map.put(3, "Three"); System.out.println(map); } }
V get(Object key): retorna o valor ao qual a chave especificada está mapeada, ou null se este Map não contiver mapeamento para a chave.
Aqui é onde especificamos a chave para obter o valor correspondente.
Vamos recuperar o valor com a chave 2:
Main.java
12345678910111213141516package com.example; import java.util.HashMap; import java.util.Map; public class Main { public static void main(String[] args) { Map<Integer, String> map = new HashMap<>(); map.put(1, "One"); map.put(2, "Two"); map.put(3, "Three"); System.out.println("Map: " + map); String value = map.get(2); System.out.println("Value: " + value); } }
-
boolean containsKey(Object key): retornatruese oMapcontiver um mapeamento para a chave especificada; -
boolean containsValue(Object value): retornatruese oMapcontiver uma ou mais chaves mapeadas para o valor especificado.
Esses dois métodos são claramente relacionados e ajudam a determinar se o Map especificado contém as chaves ou valores desejados. Esses métodos são convenientes para uso em condições, pois retornam valores boolean.
Vamos analisar um exemplo:
Main.java
12345678910111213141516171819202122232425package com.example; import java.util.HashMap; import java.util.Map; public class Main { public static void main(String[] args) { Map<Integer, String> map = new HashMap<>(); map.put(1, "One"); map.put(2, "Two"); map.put(3, "Three"); System.out.println("Map: " + map); if (map.containsKey(2)) { System.out.println("Value with key 2: " + map.get(2)); } else { System.out.println("There is no value with key 2!"); } if (map.containsValue("Four")) { System.out.println(map.get(4)); } else { System.out.println("There is no key with value \"Four\"!"); } } }
No exemplo acima, verifica-se a presença de uma chave e a presença de um valor no Map. Se os valores forem encontrados, eles são exibidos no console. Caso não existam tais valores, são exibidas mensagens indicando a ausência desses dados.
-
boolean isEmpty(): retornatruese esteMapnão contiver mapeamentos de chave-valor; -
V remove(Object key): remove o mapeamento para a chave especificada desteMap, se presente, e retorna o valor anterior.
Assim como em outras estruturas de dados, é possível remover elementos do Map.
Main.java
12345678910111213141516package com.example; import java.util.HashMap; import java.util.Map; public class Main { public static void main(String[] args) { Map<Integer, String> map = new HashMap<>(); map.put(1, "One"); map.put(2, "Two"); map.put(3, "Three"); System.out.println("Map: " + map); String removedElement = map.remove(3); System.out.println("Removed value: " + removedElement + ".\nMap after the removal operation: " + map); } }
Assim, é possível remover elementos pela chave.
Métodos Básicos para Gerenciar Maps
A seguir, estão métodos com os quais você já está familiarizado, que listarei sem exemplos. Mas ainda restam métodos interessantes.
Vamos começar pelo básico:
-
void clear(): remove todos os elementos doMap; -
int size(): retorna o número de associações chave-valor nesteMap; -
void putAll(Map<? extends K, ? extends V> m): copia todas as associações doMapespecificado para esteMap.
Agora, vamos para os métodos que retornam uma coleção com valores (ou chaves) do Map. Ou seja, extraímos da estrutura de dados uma estrutura chave-valor que armazena apenas valores (ou chaves).
Por exemplo, ArrayList<>.
Main.java
12345678910111213141516package com.example; import java.util.*; public class Main { public static void main(String[] args) { Map<Integer, String> map = new HashMap<>(); map.put(1, "One"); map.put(2, "Two"); map.put(3, "Three"); System.out.println("Map: " + map); Collection<String> list; list = map.values(); System.out.println("Values" + list); } }
Aqui, obtivemos uma coleção de valores do Map.
Agora, é possível transferir essa coleção para um ArrayList:
Main.java
123456789101112131415161718package com.example; import java.util.*; public class Main { public static void main(String[] args) { Map<Integer, String> map = new HashMap<>(); map.put(1, "One"); map.put(2, "Two"); map.put(3, "Three"); System.out.println("Map: " + map); Collection<String> collection; collection = map.values(); System.out.println("Values" + collection); List<String> arrayList = new ArrayList<>(collection); System.out.println("ArrayList: " + arrayList); } }
Inicialização de um ArrayList utilizando valores provenientes do Map.
Existe também um método que retorna as chaves do Map. No entanto, essas chaves serão retornadas na forma de uma estrutura chamada Set. Não abordaremos essa estrutura de dados neste momento; vale ressaltar que um Set é uma estrutura de dados que contém exclusivamente valores únicos.
Veja este método:
Set<K> keySet(): retorna uma visão do tipo Set das chaves contidas neste Map.
Main.java
12345678910111213141516package com.example; import java.util.*; public class Main { public static void main(String[] args) { Map<Integer, String> map = new HashMap<>(); map.put(1, "One"); map.put(2, "Two"); map.put(3, "Three"); System.out.println("Map: " + map); Set<Integer> keys; keys = map.keySet(); System.out.println("Keys: " + keys); } }
Assim, também podemos obter um conjunto de todas as chaves do Map.
Bem, parece que finalizamos os métodos. Agora, vamos analisar o uso do Map, bem como exemplos práticos:
Uso do Map
Uma estrutura como chave-valor possui diversas aplicações práticas. Vamos considerar a mais simples dessas estruturas: um sistema de notas de alunos.
Vamos criar um Map onde a chave é do tipo String, representando o nome do aluno, e o valor é do tipo Integer, representando a nota do aluno. Dessa forma, é possível atribuir notas aos alunos e recuperar facilmente a nota de um aluno específico utilizando a chave:
Main.java
12345678910111213141516package com.example; import java.util.*; public class Main { public static void main(String[] args) { Map<String, Integer> studentsGrades = new HashMap<>(); studentsGrades.put("Bob", 9); studentsGrades.put("Alice", 8); studentsGrades.put("Mike", 5); studentsGrades.put("John", 10); studentsGrades.put("Martin", 7); studentsGrades.put("Peter", 5); System.out.println("Student's grades: " + studentsGrades); } }
Agora, imagine que precisamos recuperar as notas de Mike e Alice, e então compará-las. Isso pode ser facilmente realizado utilizando os métodos que você aprendeu acima. Vamos implementar isso no código:
Main.java
123456789101112131415161718192021package com.example; import java.util.*; public class Main { public static void main(String[] args) { Map<String, Integer> studentsGrades = new HashMap<>(); studentsGrades.put("Bob", 9); studentsGrades.put("Alice", 8); studentsGrades.put("Mike", 5); studentsGrades.put("John", 10); studentsGrades.put("Martin", 7); studentsGrades.put("Peter", 5); System.out.println("Student's grades: " + studentsGrades); Integer mikeGrade = studentsGrades.get("Mike"); Integer aliceGrade = studentsGrades.get("Alice"); System.out.println(mikeGrade.compareTo(aliceGrade) == -1 ? "Alice's grade is higher": "Mike's grade is higher"); } }
O operador ternário e o método compareTo() da classe wrapper Integer foram utilizados. Caso não entenda como funciona, pode ser explicado da seguinte forma:
Main.java
12345678910111213141516171819202122232425package com.example; import java.util.*; public class Main { public static void main(String[] args) { Map<String, Integer> studentsGrades = new HashMap<>(); studentsGrades.put("Bob", 9); studentsGrades.put("Alice", 8); studentsGrades.put("Mike", 5); studentsGrades.put("John", 10); studentsGrades.put("Martin", 7); studentsGrades.put("Peter", 5); System.out.println("Student's grades: " + studentsGrades); Integer mikeGrade = studentsGrades.get("Mike"); Integer aliceGrade = studentsGrades.get("Alice"); if (mikeGrade.compareTo(aliceGrade) == -1) { System.out.println("Alice's grade is higher"); } else { System.out.println("Mike's grade is higher"); } } }
Agora, considere o seguinte: e se for solicitado reunir todos os alunos com nota superior a 7 (excluindo 7)? Isso se torna interessante, e agora vou explicar como fazer isso!
Iteração através do Map
A iteração sobre elementos em um Map em Java pode ser realizada utilizando vários métodos fornecidos pela interface Map e suas implementações. Aqui estão algumas formas de iterar sobre um Map:
Iterando sobre as chaves (keySet()): o método keySet() retorna um conjunto de todas as chaves no Map. É possível utilizar esse conjunto para iterar sobre as chaves e recuperar os valores correspondentes.
Main.java
12345678910111213141516package com.example; import java.util.*; public class Main { public static void main(String[] args) { Map<String, Integer> map = new HashMap<>(); map.put("Key1", 1); map.put("Key2", 2); for (String key : map.keySet()) { Integer value = map.get(key); System.out.println("Key: " + key + ", Value: " + value); } } }
Iteração sobre valores (values()): o método values() retorna uma coleção de todos os valores no Map. Esta coleção pode ser utilizada para iterar sobre os valores.
Main.java
123456789101112131415package com.example; import java.util.*; public class Main { public static void main(String[] args) { Map<String, Integer> map = new HashMap<>(); map.put("Key1", 1); map.put("Key2", 2); for (Integer value : map.values()) { System.out.println("Value: " + value); } } }
Iteração sobre pares chave-valor (entrySet()): o método entrySet() retorna um conjunto de objetos Map.Entry que representam pares chave-valor. Isso permite iterar diretamente sobre os pares.
Main.java
1234567891011121314151617package com.example; import java.util.*; public class Main { public static void main(String[] args) { Map<String, Integer> map = new HashMap<>(); map.put("Key1", 1); map.put("Key2", 2); for (Map.Entry<String, Integer> entry : map.entrySet()) { String key = entry.getKey(); Integer value = entry.getValue(); System.out.println("Key: " + key + ", Value: " + value); } } }
Vamos nos aprofundar um pouco mais nisso. Inicialmente, pode parecer extremamente complexo de entender, mas não é necessário se preocupar com os detalhes de como funciona, pois a sintaxe é sempre a mesma.
Map.Entry<K, V> entry : map.entrySet()
Utilizando o objeto entry, é possível acessar tanto a chave quanto o valor no Map simultaneamente. Agora, vamos resolver a tarefa apresentada anteriormente usando o entry set: recuperar todos os alunos com nota maior que 7. Para isso, será feita uma verificação com entry.getValue(), e ao encontrar alunos adequados, suas chaves serão adicionadas a um ArrayList previamente criado:
Main.java
1234567891011121314151617181920212223242526package com.example; import java.util.*; public class Main { public static void main(String[] args) { Map<String, Integer> studentsGrades = new HashMap<>(); studentsGrades.put("Bob", 9); studentsGrades.put("Alice", 8); studentsGrades.put("Mike", 5); studentsGrades.put("John", 10); studentsGrades.put("Martin", 7); studentsGrades.put("Peter", 5); System.out.println("Student's grades: " + studentsGrades); List<String> studentsWithGradeHigherThanSeven = new ArrayList<>(); for (Map.Entry<String, Integer> entry : studentsGrades.entrySet()) { if (entry.getValue() > 7) { studentsWithGradeHigherThanSeven.add(entry.getKey()); } } System.out.println(studentsWithGradeHigherThanSeven); } }
Assim, é possível iterar pelo Map e encontrar a lista desejada de estudantes que foram aprovados no exame!
O entry set é uma ferramenta muito útil, pois permite diversas formas de iterar pelo Map usando um loop, tendo acesso tanto à chave quanto ao valor.
No próximo capítulo, vamos explorar como o HashMap, que utilizamos tão ativamente neste capítulo, realmente funciona!
1. Qual interface em Java representa uma coleção de pares chave-valor?
2. Como iterar por todas as chaves em um Map usando um loop for-each?
3. Qual é o propósito do método values() em um Map?
4. Qual método é utilizado para verificar se uma chave específica está presente em um Map?
5. Qual método é utilizado para remover um par chave-valor de um Map em Java?
Obrigado pelo seu feedback!