cami-la / collections-java-api-2023

Este repositório é referente ao curso "Collection Framework API Java" e é uma valiosa contribuição para a comunidade de desenvolvedores Java, fornecendo exemplos práticos e recursos educacionais relacionados à poderosa API de coleções da linguagem Java.
https://web.dio.me/course/conhecendo-collections-java/learning/c5d6f4e1-6d05-4eea-93d8-d292c708999f
1.05k stars 766 forks source link

Me ajuda? #39

Closed queelgomes closed 1 year ago

queelgomes commented 1 year ago

Olá Cami!!

Estou fazendo aqui o Desafio do Gerenciador de Alunos e coloquei um método para imprimir por nome, media e matricula. Criei os comparator, porem quando imprimo por matricula, esta saindo duplicado, nao respeitando o equals() and hashCode().

Eu preciso colocar também dentro desse comparador o equals e hashcode?

Estou adorando o curso! Vc é muito boa! OBRIGADAAA!!

Aluno.java

package set.DesafioListaDeAlunos.modelo;

import java.util.Comparator;
import java.util.Objects;

public class Aluno implements Comparable<Aluno>{
    private String nome;
    private int matricula;
    private double media;

    public Aluno(String nome, int matricula, double media) {
        this.nome = nome;
        this.matricula = matricula;
        this.media = media;
    }

    public String getNome() {
        return nome;
    }
    public int getMatricula() {
        return matricula;
    }
    public double getMedia() {
        return media;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof Aluno aluno)) return false;
        return getMatricula() == aluno.getMatricula() && Objects.equals(getNome(), aluno.getNome());
    }
    @Override
    public int hashCode() {
        return Objects.hash(getNome(), getMatricula());
    }

    @Override
    public String toString() {
        return String.format("Aluno: %s - Matricula: %d - Média: %.1f", getNome(), getMatricula(),getMedia());
    }

    @Override
    public int compareTo(Aluno a) {
        return nome.compareTo(a.getNome());
    }
}

class ComparadorPorMatricula implements Comparator<Aluno>{
    @Override
    public int compare(Aluno o1, Aluno o2) {
        return Long.compare(o1.getMatricula(), o2.getMatricula());
    }
}

class ComparadorPorMedia implements Comparator<Aluno>{
    @Override
    public int compare(Aluno o1, Aluno o2) {
        return Double.compare(o1.getMedia(), o2.getMedia());
    }
}

GerenciadorAlunos.java

package set.DesafioListaDeAlunos.modelo;

import java.util.HashSet;
import java.util.Set;
import java.util.TreeSet;

public class GerenciadorAlunos {
    private Set<Aluno> alunosSet;

    public GerenciadorAlunos() {
        this.alunosSet = new HashSet<>();
    }

    public void adicionarAluno(String nome, int matricula, double media){
        alunosSet.add(new Aluno(nome, matricula, media));
    }
    public void removerAluno(long matricula){
        Aluno alunoRemover = null;
        for (Aluno a: alunosSet){
            if (a.getMatricula() == matricula){
                alunoRemover = a;
            }
        }
        alunosSet.remove(alunoRemover);
    }
    public void exibirAlunosPorNome(){
        Set<Aluno> listaPorNome = new TreeSet<>(alunosSet);
        System.out.println("\nAlunos Matriculados (nome): ");
        for (Aluno a : listaPorNome){
            System.out.printf(" > Aluno: %s - Matricula: %d - Média: %.1f\n", a.getNome(), a.getMatricula(), a.getMedia());
        }
    }
    public void exibirAlunosPorMedia(){
        Set<Aluno> listaPorMedia = new TreeSet<>(new ComparadorPorMedia());
        listaPorMedia.addAll(alunosSet);
        System.out.println("\nAlunos Matriculados (media): ");
        for (Aluno a : listaPorMedia){
            System.out.printf(" > Aluno: %s - Matricula: %d - Média: %.1f\n", a.getNome(), a.getMatricula(), a.getMedia());
        }
    }
    public void exibirAlunosPorMatricula(){
        Set<Aluno> listaPorMatricula = new TreeSet<>(new ComparadorPorMatricula());
        listaPorMatricula.addAll(alunosSet);
        System.out.println("\nAlunos Matriculados: (matricula)");
        for (Aluno a : listaPorMatricula){
            System.out.printf(" > Aluno: %s - Matricula: %d - Média: %.1f\n", a.getNome(), a.getMatricula(), a.getMedia());
        }
    }
}

Principal.java

package set.DesafioListaDeAlunos.principal;

import set.DesafioListaDeAlunos.modelo.GerenciadorAlunos;

public class Principal {
    public static void main(String[] args) {
        GerenciadorAlunos gerenciadorAlunos = new GerenciadorAlunos();

        gerenciadorAlunos.adicionarAluno("Aluno 1", 3341, 8.7);
        gerenciadorAlunos.adicionarAluno("Aluno 2", 3124, 9.3);
        gerenciadorAlunos.adicionarAluno("Aluno 3", 1233, 8.9);
        gerenciadorAlunos.adicionarAluno("Aluno 4", 3134, 9.1);
        gerenciadorAlunos.adicionarAluno("Aluno 4", 5456, 7.5);
        gerenciadorAlunos.adicionarAluno("Aluno 5", 7657, 7.5);
        gerenciadorAlunos.adicionarAluno("Aluno 2", 3755, 8.9);

        gerenciadorAlunos.exibirAlunosPorMatricula();
        gerenciadorAlunos.exibirAlunosPorNome();
        gerenciadorAlunos.exibirAlunosPorMedia();
    }
}
queelgomes commented 1 year ago

Já achei o erro Cami rsrs Fiz o equals com nome e matricula, por isso que estava registrando. Mas agradeço mesmo assim. Bjsss

cami-la commented 1 year ago

Primeiramente muitíssimo obrigada pelo feedback. Fico muito feliz que esteja gostando do curso. <3 Aeeee sim, @queelgomes. Parabéns!! Que bom que tenha conseguido resolver sozinha. (:

Caso surja alguma outra dúvida, fico à disposição. Bjs.