PHP, Java, JavaScript, XML, XHTML, HTML, CSS, ASP, Delphi, Assembly, LaTeX, C, UML, Flash, Perl, SQL, Python, Zope, Pascal, WML. Se conhece mais de 3 siglas referidas, este é o forum para si.
Moderadores: Administradores, Moderadores
por riapa » Sexta Abr 11, 2008 17:05
Boas!
Tenho duas listas, Lista A e Lista B, e queria passar para a lista B todos os objectos da A excepto os repetidos.
O problema é que parece que a função do java ListaA.contains(var) apenas compara o id de cada objecto e não os valores das suas variáveis.
É que os meus objectos têm todos ids diferentes, mas os seus valores, em alguns, são iguais...
Como é que me safo disto?:roll:
Nota: Estou a usar um for each.
-

riapa
- Membro Diamante

-
- Mensagens: 1144
- Registado: Terça Jan 03, 2006 18:23
por vamosAeles » Sábado Abr 12, 2008 22:09
Boas, experimenta o metodo equals dos objectos em questão.
Para os mais conhecidos e usados tipo Strings, Numeros, Datas, etc, o equals compara o conteúdo (isto se forem do mesmo tipo). Se for uma classe definida por ti também podes fazer override do equals.
[[]]
-
vamosAeles
- Membro de Prata

-
- Mensagens: 206
- Registado: Quarta Jan 04, 2006 21:29
- Localização: Lisboa/Proença
por alexin » Sábado Abr 12, 2008 22:26
Exactamente.
Já agora, dá uma vista de olhos à classe Collections, pode ser que tenha um método do teu interesse.
-
alexin
- Aprendiz

-
- Mensagens: 40
- Registado: Domingo Mar 09, 2008 18:38
por riapa » Domingo Abr 13, 2008 13:06
Nada, parece que não compara...
Tenho uma ArrayList<Ponto> Pontos = new ArrayList<Pontos>();
Um ponto tem um x e um y: Ponto.x e Ponto.y
Na minha ArrayList Pontos existem alguns que são iguais, ou seja, têm o mesmo x e y e queria apagar esses. É claro que os seus ids são diferentes...
O contains ou o equals não funciona, parece que só liga ao id e não ao valor que têm cada objecto ponto.
O que poderá ser?

-

riapa
- Membro Diamante

-
- Mensagens: 1144
- Registado: Terça Jan 03, 2006 18:23
por alexin » Domingo Abr 13, 2008 16:53
- Código: Seleccionar todos
public class Ponto {
// (...)
@Override
public boolean equals(Object o) {
if(!(o instanceof Ponto)){
throw new IllegalArgumentException();
}
return (this.x ==((Ponto)o).x) && (this.y ==((Ponto)o).y);
}
}
Percorre a lista, compara os elementos e remove os que devolverem TRUE no equals().
Se não conseguires mostra-nos o código que estás a utilizar.
-
alexin
- Aprendiz

-
- Mensagens: 40
- Registado: Domingo Mar 09, 2008 18:38
por riapa » Domingo Abr 13, 2008 19:00
Grande ideia essa do override, não tinha pensado nisso. Mas acho que o meu problema é mesmo na construção dos meus ciclos.
Temos:

Fraction = fracção. Tal como um Ponto x y » num den...

Cantor é a ArrayList onde estão todas as Fractions; FinalCantor será o Array que irá conter todas as Fractions de Cantor, excepto as repetidas.
- Código: Seleccionar todos
ArrayList<Fraction> FinalCantor = new ArrayList<Fraction>();
FinalCantor.add(this.Cantor.get(0));
for(Fraction A : this.Cantor)
{
for(Fraction B : FinalCantor)
{
if(A.equals(B) == false)
{
FinalCantor.add(A);
break;
}
}
}
Acho que o meu problema é que ele não está a percorrer o Array FinalCantor todo e a ver se já lá existe uma valor igual. Ele foca-se sempre no primeiro Fraction B... O que faz algum sentido, ele compara o primeiro do FinalCantor com o A do Cantor e como é sempre dif adiciona... Eu quero que ele precorra o FinalCantor todo, e se realmente não existir lá, então adiciona-o.
Como é que dou a volta a isto?
-

riapa
- Membro Diamante

-
- Mensagens: 1144
- Registado: Terça Jan 03, 2006 18:23
por alexin » Domingo Abr 13, 2008 19:19
riapa Escreveu:Grande ideia essa do override, não tinha pensado nisso.
O vamosAeles já tinha falado nisso...
Se bem percebi é isto que tu queres:
- Código: Seleccionar todos
ArrayList<Fraction> finalCantor = new ArrayList<Fraction>();
for(Fraction f : cantor){
if(!finalCantor.contains(f)){
finalCantor.add(f);
}
}
O método contains() utiliza o equals() da classe Fraction para comparar os objectos em questão. Se o 'f' ainda não estiver em 'finalCantor' então adiciona-o. No final tens uma lista com elementos "únicos".
-
alexin
- Aprendiz

-
- Mensagens: 40
- Registado: Domingo Mar 09, 2008 18:38
por riapa » Domingo Abr 13, 2008 21:51
Epah é isso mesmo! Grande
alexin e
vamosAeles!
Obrigado aos dois.
A solução é de facto simples, mas não me passou pela cabeça. Já aprendi 1s coisinhas eheh
Obrigado um vez mais!

-

riapa
- Membro Diamante

-
- Mensagens: 1144
- Registado: Terça Jan 03, 2006 18:23
Voltar para Programação
Quem está ligado:
Utilizadores a ver este Fórum: Nenhum utilizador registado e 0 visitantes