4
respostas

Imprime apenas o primeiro Aluno adicionado

Olá, estou usando o foreach do java 8 e quando executo o programa só exibe o primeiro Aluno adicionado. Segue o código

// foreach Java 8
        javaColecoes.getAlunos().forEach(aluno -> {
            System.out.println(aluno);
        });

Segue a classe de teste.

package br.com.alura;

import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class TestaCursoComAluno {

    /**
     * @param args
     */
    public static void main(String[] args) {
        Curso javaColecoes = new Curso("Dominando as coleções do Java",
                "Paulo Silveira");

        javaColecoes.adiciona(new Aula("Trabalhando com Arrays", 21));
        javaColecoes.adiciona(new Aula("Criando uma Aula", 20));
        javaColecoes.adiciona(new Aula("Modelando Coleções", 24));

        Collection<Curso> cursos = new HashSet<Curso>();

        Aluno a1 = new Aluno("Eduardo", 123456);
        Aluno a2 = new Aluno("Maxwell", 654321);
        Aluno a3 = new Aluno("Teixeira", 789456);

        javaColecoes.matricula(a1);
        javaColecoes.matricula(a2);
        javaColecoes.matricula(a3);

        System.out.println("Todos os alunos matriculados");
        // System.out.println(javaColecoes.getAlunos());

        // Set<Aluno> alunoss = new HashSet<Aluno>();
        // for (Aluno aluno : alunoss) {
        // System.out.println(aluno);
        // }

        // foreach Java 8
        javaColecoes.getAlunos().forEach(aluno -> {
            System.out.println(aluno);
        });

        // foreach Java 5
        // for (Curso curso : cursos) {
        // System.out.println(curso);
        // }

        // acessando elementos de um Set antes do Java 5
        // Set<Aluno> alunos = javaColecoes.getAlunos();
        // Iterator<Aluno> iterador = alunos.iterator();
        // acessando elementos de um Set antes do Java 5
        // while (iterador.hasNext()) {
        // System.out.println(iterador.next());
        // }

    }

}

E na classe TestaBuscaAlunosNoCurso, por mais que eu coloque uma matrícula que exista, o método lança a exceção. Segue o método buscaMatriculado.


    public Aluno buscaMatriculado(long numero) {
        if (!(matriculaParaAluno.containsKey(numero))) {
            throw new NoSuchElementException("Matrícula " + numero + " não encontrada!");
        }
        return this.matriculaParaAluno.get(numero);
    }

Alguém me dá um help. Agradeço desde já.

4 respostas

Eduardo não estou vendo aonde você está adicionando a lista de alunos, já que você ta fazendo o for, deve ter alguma lista, mais não estou vendo.

Oi Alisson, seria essa Lista?

package br.com.alura;

import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.NoSuchElementException;
import java.util.Set;
import java.util.TreeSet;

public class Curso {

    private String nome;
    private String instrutor;
    private List<Aula> aulas = new LinkedList<Aula>();
    private Set<Aluno> alunos = new TreeSet<Aluno>(); //Nesta linha
    private Map<Integer, Aluno> matriculaParaAluno = new HashMap<Integer, Aluno>();

    ....getters e setters...

    public void matricula(Aluno aluno) {
        this.alunos.add(aluno);
        this.matriculaParaAluno.put(aluno.getMatricula(), aluno);
    }

    public Set<Aluno> getAlunos() {
        return Collections.unmodifiableSet(alunos);
    }

    public Aluno buscaMatriculado(int numero) {
        if ((matriculaParaAluno.containsKey(numero))) {
            return this.matriculaParaAluno.get(numero);
        }
        throw new NoSuchElementException("Matrícula " + numero + " não encontrada!");
    }
}

Cade o método adiciona?

Fala galera, nem lembro mais. Rodei o programa de novo e ta imprimindo tudo certinho. Valeu mesmo assim.