Implementei no meu pequeno mundo de videolocadora os conceitos de hashcode e equals.
package treino;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
public class VideoLocadora {
private String nome;
private String endereco;
List<Filme> filmes = new ArrayList<>();
public void catalogar(Filme fm) {
this.filmes.add(fm);
}
public void exibirCatalogo() {
filmes.forEach(filme -> {
System.out.println(filme);
});
}
public boolean estaCatalogado(Filme fm) {
return this.filmes.contains(fm);
}
public void setNome(String nome) {
this.nome = nome;
}
public void setEndereco(String endereco) {
this.endereco = endereco;
}
public String getNome() {
return nome;
}
public String getEndereco() {
return endereco;
}
public Collection<Filme> getFilmes() {
return Collections.unmodifiableCollection(filmes);
}
}
package treino;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Filme implements Comparable<Filme>{
private String nome;
private int minutos;
private List<Ator> ator = new ArrayList<Ator>(); //para adicionar vários atores em um filme
public Filme(String nome, int minutos) {
this.nome = nome;
this.minutos = minutos;
}
public void adiciona(Ator ator) {
this.ator.add(ator);
}
public String getNome() {
return nome;
}
public int getMinutos() {
return minutos;
}
public List<Ator> getAtor() {
return Collections.unmodifiableList(ator); //não permitir edições na List, somente vizualização
}
@Override
public boolean equals(Object obj) { //comparando nomes de filmes
Filme filme = (Filme) obj;
return this.nome.equals(filme.nome);
}
@Override
public int hashCode() { //pegando o código objeto da referência
return this.nome.hashCode();
}
@Override
public String toString() {
return "Nome: " + this.nome + "\nDuração: " + this.minutos + " minutos\nAtores: " + this.ator;
}
@Override
public int compareTo(Filme outroFilme) { //comparar dois filmes pela ordem alfabética
return this.nome.compareTo(outroFilme.nome);
}
}
package treino;
public class TestaVideoLocadora {
public static void main(String[] args) {
VideoLocadora vd = new VideoLocadora();
vd.setNome("Foster");
vd.setEndereco("Rua dos Bacanas");
Filme fm = new Filme("First Blood", 93);
Filme fm2 = new Filme("Rambo: First Blood Part II", 96);
Filme fm3 = new Filme("Rambo III", 102);
vd.catalogar(fm);
vd.catalogar(fm2);
vd.catalogar(fm3);
vd.exibirCatalogo();
System.out.println();
Filme fm4 = new Filme("First Blood", 93);
System.out.println("O filme " + fm4 + " está catalogado? ");
System.out.println(vd.estaCatalogado(fm4));
}
}
Ta tudo ok?