Uma Lista de Dicionários é uma combinação de duas estruturas de dados poderosas:
ArrayList (lista) e HashMap (dicionário). É um ArrayList onde cada elemento é um HashMap.
Sintaxe:
ArrayList<HashMap<String, String>> lista = new ArrayList<>();
Lê-se: "ArrayList de HashMaps que têm String como chave e String como valor"
Um sistema completo para cadastrar e gerenciar alunos:
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Scanner;
public class CadastroAlunos {
public static void main(String[] args) {
Scanner entrada = new Scanner(System.in);
ArrayList<HashMap<String, String>> alunos = new ArrayList<>();
while (true) {
System.out.println("=== SISTEMA DE CADASTRO ===");
System.out.println("1. Cadastrar aluno");
System.out.println("2. Listar alunos");
System.out.println("3. Buscar aluno");
System.out.println("4. Sair");
System.out.print("Escolha: ");
int opcao = entrada.nextInt();
entrada.nextLine();
if (opcao == 1) {
// Cadastrar novo aluno
HashMap<String, String> aluno = new HashMap<>();
System.out.print("Nome: ");
aluno.put("nome", entrada.nextLine());
System.out.print("Matrícula: ");
aluno.put("matricula", entrada.nextLine());
System.out.print("Curso: ");
aluno.put("curso", entrada.nextLine());
System.out.print("Período: ");
aluno.put("periodo", entrada.nextLine());
alunos.add(aluno);
System.out.println("Aluno cadastrado com sucesso!");
} else if (opcao == 2) {
// Listar todos os alunos
if (alunos.isEmpty()) {
System.out.println("Nenhum aluno cadastrado!");
} else {
System.out.println("=== LISTA DE ALUNOS ===");
for (int i = 0; i < alunos.size(); i++) {
HashMap<String, String> aluno = alunos.get(i);
System.out.println("Aluno " + (i + 1) + ":");
System.out.println(" Nome: " + aluno.get("nome"));
System.out.println(" Matrícula: " + aluno.get("matricula"));
System.out.println(" Curso: " + aluno.get("curso"));
System.out.println(" Período: " + aluno.get("periodo"));
}
System.out.println("Total: " + alunos.size() + " alunos");
}
} else if (opcao == 3) {
// Buscar aluno por matrícula
System.out.print("Digite a matrícula: ");
String matriculaBusca = entrada.nextLine();
boolean encontrado = false;
for (HashMap<String, String> aluno : alunos) {
if (aluno.get("matricula").equals(matriculaBusca)) {
System.out.println("=== ALUNO ENCONTRADO ===");
System.out.println("Nome: " + aluno.get("nome"));
System.out.println("Matrícula: " + aluno.get("matricula"));
System.out.println("Curso: " + aluno.get("curso"));
System.out.println("Período: " + aluno.get("periodo"));
encontrado = true;
break;
}
}
if (!encontrado) {
System.out.println("Aluno não encontrado!");
}
} else if (opcao == 4) {
System.out.println("Sistema encerrado!");
break;
}
}
entrada.close();
}
}
=== SISTEMA DE CADASTRO ===
1. Cadastrar aluno
2. Listar alunos
3. Buscar aluno
4. Sair
Escolha: 1
Nome: Ana Silva
Matrícula: 2024001
Curso: Ciência da Computação
Período: 3º
Aluno cadastrado com sucesso!
Exemplos de operações úteis com funcionários:
for-each percorrendo um
ArrayList<HashMap>. A coleção
funcionarios guarda três HashMaps
(func1, func2, func3),
e cada um contém as chaves nome, cargo
e salario. A cada iteração do laço, a variável
func "aponta" para um dos HashMaps da lista —
primeiro func1, depois func2,
depois func3 — permitindo acessar seus campos
com func.get("nome"), func.get("cargo")
e func.get("salario").
import java.util.ArrayList;
import java.util.HashMap;
public class OperacoesLista {
public static void main(String[] args) {
ArrayList<HashMap<String, String>> funcionarios = new ArrayList<>();
// Adicionando funcionários
HashMap<String, String> func1 = new HashMap<>();
func1.put("nome", "João");
func1.put("cargo", "Desenvolvedor");
func1.put("salario", "5000");
funcionarios.add(func1);
HashMap<String, String> func2 = new HashMap<>();
func2.put("nome", "Maria");
func2.put("cargo", "Designer");
func2.put("salario", "4500");
funcionarios.add(func2);
HashMap<String, String> func3 = new HashMap<>();
func3.put("nome", "Pedro");
func3.put("cargo", "Gerente");
func3.put("salario", "7000");
funcionarios.add(func3);
// 1. Contar funcionários
System.out.println("Total de funcionários: " + funcionarios.size());
// 2. Calcular folha de pagamento total
double folhaTotal = 0;
for (HashMap<String, String> func : funcionarios) {
folhaTotal += Double.parseDouble(func.get("salario"));
}
System.out.printf("Folha de pagamento: R$ %.2f\n", folhaTotal);
// 3. Buscar por cargo
String cargoBusca = "Desenvolvedor";
System.out.println("Funcionários com cargo: " + cargoBusca);
for (HashMap<String, String> func : funcionarios) {
if (func.get("cargo").equals(cargoBusca)) {
System.out.println("- " + func.get("nome"));
}
}
// 4. Atualizar salário
for (HashMap<String, String> func : funcionarios) {
if (func.get("nome").equals("João")) {
func.put("salario", "5500");
System.out.println("Salário de João atualizado!");
}
}
// 5. Remover funcionário
funcionarios.removeIf(func -> func.get("nome").equals("Pedro"));
System.out.println("Funcionário Pedro removido!");
System.out.println("Novo total: " + funcionarios.size());
}
}
Total de funcionários: 3
Folha de pagamento: R$ 16500.00
Funcionários com cargo: Desenvolvedor
- João
Salário de João atualizado!
Funcionário Pedro removido!
Novo total: 2
Leia cada trecho de código com atenção e responda o que acontece quando ele é executado:
Reforce o conteúdo desta aula com mais dois exercícios práticos: