Pessoal, fiz o teste abaixo o retorno foi false quando eu verifico se aluno a3 e aluno a4 está matriculado . E também não entendi, o contains do Set. Ele chama o hashcode() do elemento que está dentro dele, nesse caso Aluno? Fiquei confuso.
package br.com.alura;
import java.util.Collections;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
public class Curso {
private String nome;
private String instrutor;
private List<Aula> aulas = new LinkedList<Aula>();
private Set<Aluno> alunos = new HashSet<>();
public Curso(String nome, String instrutor) {
this.nome = nome;
this.instrutor = instrutor;
}
public String getNome() {
return nome;
}
public String getInstrutor() {
return instrutor;
}
public List<Aula> getAulas() {
return Collections.unmodifiableList(aulas);
}
public void adiciona(Aula aula) {
this.aulas.add(aula);
}
public int getTempoTotal() {
int tempoTotal = 0;
for (Aula aula : aulas) {
tempoTotal += aula.getTempo();
}
return tempoTotal;
}
@Override
public String toString() {
return "Curso: " + this.nome + ", tempo total: " + this.getTempoTotal() + ", aulas: " + this.getAulas();
}
public void matricula(Aluno a1) {
this.alunos.add(a1);
}
public Set<Aluno> getAlunos() {
return Collections.unmodifiableSet(alunos);
}
public void remove(Aluno aluno) {
boolean confirmaExclucao = alunos.remove(aluno);
if(confirmaExclucao){
System.out.println("Aluno excluido com sucesso!");
}else{
System.out.println("Aluno não consta na lista.");
}
}
public boolean estaMatriculado(Aluno aluno){
return this.alunos.contains(aluno);
}
}
package br.com.alura;
public class Aluno {
private String nome;
private int numerMatricula;
public Aluno(String nome, int numeroMatricula) {
if(nome == null){
throw new NullPointerException();
}
this.nome = nome;
this.numerMatricula = numeroMatricula;
}
public String getNome() {
return nome;
}
public int getNumerMatricula() {
return numerMatricula;
}
@Override
public String toString() {
return "[Aluno: " + this.nome + ", matricula: " + this.numerMatricula + "]";
}
@Override
public boolean equals(Object obj) {
Aluno outro = (Aluno) obj;
return this.nome.equals(outro.nome);
}
@Override
public int hashCode() {
return this.nome.hashCode();
}
}
package br.com.alura;
public class TestaCursoComAluno {
public static void main(String[] args) {
Curso javaColecoes = new Curso("Dominando as colecoes do Java",
"Paulo Silveira");
javaColecoes.adiciona(new Aula("Trabalhando com ArrayList", 21));
javaColecoes.adiciona(new Aula("Criando uma Aula", 20));
javaColecoes.adiciona(new Aula("Modelando com colecoes", 22));
Aluno a1 = new Aluno("Rodrigo Turini", 34672);
Aluno a2 = new Aluno("Guilherme Silveira", 5617);
Aluno a3 = new Aluno("Maurício Aniche", 17645);
Aluno a4 = new Aluno("Maurício Aniche", 17645);
javaColecoes.matricula(a1);
javaColecoes.matricula(a2);
javaColecoes.matricula(a3);
System.out.println("Todos os alunos matriculados");
javaColecoes.getAlunos().forEach(aluno -> {
System.out.println(aluno);
});
javaColecoes.remove(a4);
System.out.println("Lista após tentativa de exclusão de um aluno");
javaColecoes.getAlunos().forEach(aluno -> {
System.out.println(aluno);
});
System.out.println("Tem o mesmo nome? " + a3.equals(a4));
System.out.println("Aluno " + a3.getNome() + " esta matriculado?");
System.out.println(javaColecoes.estaMatriculado(a4));
}
}