Comparar elementos em um ArrayList

791 views
Skip to first unread message

Cleidimar Viana

unread,
Oct 27, 2011, 11:15:35 AM10/27/11
to Android Brasil - Dev
Olá Pessoal,

como sempre, estou precisando de um Help.

Quero encontrar qual a moda de uma ArrayList, ou seja, qual elemento
que repete mais dentro desta lista. Tentei fazer da seguinte maneira
como mostra abaixo, comparando o ultimo com o penúltimo elemento
inserido e adicionando numa outra lista. O que pode estar errado?!

meuBotao.setOnClickListener(new View.OnClickListener(){
public void onClick(View arg0){

Double v =
Double.parseDouble(entradaDeTexto.getText().toString());

//limpa o campo de inserção de dados
entradaDeTexto.setText(null);

//Armazena um valor na lista
lista.add(v);

if (tamanhoLista > 1){
if (lista.get(tamanhoLista)== lista.get(tamanhoLista-1)){
lista2.add(v);
}
}

}//Fim do onClick()


}//Fim do OnClickListener()
);//Fim do setOnClickListener()

leonardo.

unread,
Oct 27, 2011, 11:24:33 AM10/27/11
to androidb...@googlegroups.com
tentou usar um set ao inves de list? 

Cleidimar Viana

unread,
Oct 27, 2011, 11:32:04 AM10/27/11
to Android Brasil - Dev
Sim, tentei. Mas ai que tá, o Set armazena os valores que não repetem.
E no meu caso, quero os valores repetentes armazenados numa outra
lista.



On Oct 27, 1:24 pm, "leonardo." <leonardometalh...@gmail.com> wrote:
> tentou usar um set ao inves de list?
>
> Em 27 de outubro de 2011 12:15, Cleidimar Viana
> <cleidimarvi...@gmail.com>escreveu:

leonardo.

unread,
Oct 27, 2011, 11:42:11 AM10/27/11
to androidb...@googlegroups.com
tentou assim?
meuBotao.setOnClickListener(new View.OnClickListener(){
               public void onClick(View arg0){

                       Double v =
Double.parseDouble(entradaDeTexto.getText().toString());

               //limpa o campo de inserção de dados
               entradaDeTexto.setText(null);

               //Armazena um valor na lista
               lista.add(v);

               if (tamanhoLista > 1){
                       if (lista.contains(v)){
                               lista2.add(v);
                       }

               }

               }//Fim do onClick()


               }//Fim do OnClickListener()
       );//Fim do setOnClickListener()

leonardo.

unread,
Oct 27, 2011, 11:43:40 AM10/27/11
to androidb...@googlegroups.com
nao testei, entao qlqr coisa de errado pode xingar ahuahauhah

Cleidimar Viana

unread,
Oct 27, 2011, 11:48:43 AM10/27/11
to Android Brasil - Dev
Acabei de tentar, mas não funfou!

Acho que neste caso será um algoritmo de ordem, porque tem que ser
comparado elemento por elemento e armazenar numa outra lista.
Essa comparação, não estou conseguindo fazer.


On Oct 27, 1:42 pm, "leonardo." <leonardometalh...@gmail.com> wrote:
> tentou assim?
> meuBotao.setOnClickListener(new View.OnClickListener(){
>                public void onClick(View arg0){
>
>                        Double v =
> Double.parseDouble(entradaDeTexto.getText().toString());
>
>                //limpa o campo de inserção de dados
>                entradaDeTexto.setText(null);
>
>                //Armazena um valor na lista
>                lista.add(v);
>
>                if (tamanhoLista > 1){
> *                       if (lista.contains(v)){
>                                lista2.add(v);
>                        }*
>                }
>
>                }//Fim do onClick()
>
>                }//Fim do OnClickListener()
>        );//Fim do setOnClickListener()
> Em 27 de outubro de 2011 12:32, Cleidimar Viana
> <cleidimarvi...@gmail.com>escreveu:

leonardo.

unread,
Oct 27, 2011, 12:02:13 PM10/27/11
to androidb...@googlegroups.com
entao acho que por ser feito isso

private getValoresRepetidos(Double valor, List lista) {
List valoresRepetidos = new ArrayList();
 for (int i=0; i < lista.size(); i++) {
    Double valorNaLista (Double) lista.get(i);
    if (valorNaLista.equals(valor) {
      valoresRepetidos .add(valorNaLista);
    } 
    
  return valoresRepetidos ;
 }

depois do 
 //Armazena um valor na lista
 lista.add(v);

voce chama o metodo
lista2.addAll(getValoresRepetidos(Double valor, List lista) );

Cleidimar Viana

unread,
Oct 27, 2011, 11:50:21 PM10/27/11
to Android Brasil - Dev
Vlw aeh galera, consegui da seguinte forma:

int nVezes = 0;
int comparaV=0;
if ( tamanhoLista > 2 ){
for(int p = 0; p<tamanhoLista; p++){
nVezes = 0;
for(int k = p+1; k< tamanhoLista; k++){
if(lista.get(p).equals(lista.get(k))){
++nVezes;
}
}
if (nVezes > comparaV){
moda = lista.get(p);
comparaV = nVezes;
}

}
}


On Oct 27, 2:02 pm, "leonardo." <leonardometalh...@gmail.com> wrote:
> entao acho que por ser feito isso
>
> private getValoresRepetidos(Double valor, List lista) {
> List valoresRepetidos = new ArrayList();
>  for (int i=0; i < lista.size(); i++) {
>     Double valorNaLista (Double) lista.get(i);
>     if (valorNaLista.equals(valor) {
>       valoresRepetidos .add(valorNaLista);
>     }
>
>   return valoresRepetidos ;
>  }
>
> depois do
>  //Armazena um valor na lista
> * lista.add(v);*
>
> voce chama o metodo
> *lista2.addAll(getValoresRepetidos(Double valor, List lista) );*
>
> Em 27 de outubro de 2011 12:48, Cleidimar Viana
> <cleidimarvi...@gmail.com>escreveu:

Felipe Costa

unread,
Oct 28, 2011, 8:19:58 AM10/28/11
to Android Brasil - Dev
O problema esta na forma de comparação pois:

== , compara a referenção de um objeto na memória
equals compara o valor dele

Ex

Integer x = 0;
Integer y =0;

// x == y - isso retorna false, pois os OBJETOS são diferentes
//x.equals(y) - isso retorna true, pois os VALORES são iguais

Felipe Costa
Analista de Sistemas Android Junior

Cleidimar Viana

unread,
Oct 28, 2011, 2:20:41 PM10/28/11
to Android Brasil - Dev
Exatamente isso @felipe, apanhei demais, mas já consegui resolver o
problema. Vlw. Obrigado
Reply all
Reply to author
Forward
0 new messages