Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Carcleo

Comparando ArrayLists de ArraList<Integer>

Recommended Posts

Bom, tenho um ArrayList<ArrayList<Integer>> chamado listaRepetida.

E um determinado momento ela retorna 2 ArrayList<Integer>.da forma abaixo:

[0-> [1,3,3,2], 1->[3,1,1,4] ]
Mas essa ordem de 4 inteiros pode ser mudada para um índice com 4 inteiros, outro índice com 2 inteiros, semelhante ao EXEMPLO abaixo:
[0-> [1,3,3,2], 1->[2,1], 2->[1,2,3,4,5,6] ]
Mas sempre em quantidades pares. Ou seja, ou o ArrayList tem 2 ou 4 ou 6 ....... números inteiros.

O que eu preciso saber é como comparar cada dois números de cada ArrayList.

Por exemplo:
[0-> [1,3,3,2], 1->[3,1,1,4] ]
comparações:
1,3 do índice 0 com 3,1 índice 1
1,3 do índice 0 com 1,4 índice 1
Depois
3,2 do índice 0 com 3,1 índice 1
3,2 do índice 0 com 3,1 índice 1
As comparações levam em conta que 3,1 é igual a 1,3 e analogamente 3,2 é igual a 2,3 e assim por diante..

De forma a no final, ter uma String texto de retorno com o resultado das comparações.

Nesse caso encontramos que
1,3 do índice 0 é igual a 3,1 índice 1
Então, só entra 1.

Então a variável texto seria:
{1-3, 3-2, 1-4}
Note que o 3-1 foi retirado.

Tentei da forma abaixo mas não deu certo.
Minha lógica não esta adequada.
...
String texto = "{";

  for (int i = 0; i < listaRepetida.size(); i++)
  {
       for (int j = i+1; j < listaRepetida.size(); j++)
       {
           if (
                  ( listaRepetida.get(i).get(0) == listaRepetida.get(j).get(0) && listaRepetida.get(i).get(1) == listaRepetida.get(j).get(1) ) ||
                  ( listaRepetida.get(i).get(0) == listaRepetida.get(j).get(1) && listaRepetida.get(i).get(1) == listaRepetida.get(j).get(0) )
              )
              {
                   System.out.println(listaRepetida.get(j).get(0));
                   System.out.println(listaRepetida.get(j).get(1));
                   System.out.println();
              }
             else
             {
                   texto +=listaRepetida.get(i).get(0)+"-"+listaRepetida.get(i).get(1);
             }
             j+=2;
          }
          i+=2;
       }
      texto += "}";

      System.out.println(texto);
O que fazer?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veja só:

for (int i = 0; i < conta.size(); i++)
{
listaRepetida2.get(conta.get(i)).remove(conta.get(i+1));
listaRepetida2.get(conta.get(i)).remove(conta.get(i+1));
i+=2;
}
Isso esta me retornando um ArrayList de inteiros assim ( no momento)
[1,0,1]
Isso me diz que a cada sequencia de 3 números tenho o primeiro.
1, que preciso pegar outro ArrayList<ArrayList<Integer>> chamado listaRepetida e remover do seu indice 1 (conta.get(i)) seus índices 0 e 1 (conta.get(i+1) e conta.get(i+2)).

Mas não esta removendo.
Tanto antes quanto depois da remoção this.listaRepetida continua:
[0-> [1,3,3,2], 1->[3,1,1,4] ]
O correto deveria ser:
[0-> [1,3,3,2], 1->[1,4] ]
Onde esta o erro?
Veja toda a classe
import java.util.ArrayList;

public class RemoveRepetidas
{
  ArrayList<ArrayList<Integer>> listaRepetida = new ArrayList<ArrayList<Integer>>();

  RemoveRepetidas (ArrayList<ArrayList<Integer>> _listaRepetida)
  {
    this.listaRepetida = _listaRepetida;
  }

    
  String removeRepetida()
  {      
     System.out.println(this.listaRepetida);
     ArrayList<Integer> conta = new ArrayList<Integer>();
    ArrayList<ArrayList<Integer>> listaRepetida2 = listaRepetida;


     for (int i = 0; i < listaRepetida2.size(); i++)
     {
        for (int j = i+1; j < listaRepetida2.size(); j++)
        {
             for (int k = 0; k < listaRepetida2.get(i).size(); k++)
             {
                 for (int l = 0; l < listaRepetida2.get(j).size(); l++)
                 {
                     if (
                          ( listaRepetida2.get(i).get(k) == listaRepetida2.get(j).get(l) && listaRepetida2.get(i).get(k+1) == listaRepetida2.get(j).get(l+1) ) ||
                          ( listaRepetida2.get(i).get(k+1) == listaRepetida2.get(j).get(l) && listaRepetida2.get(i).get(k) == listaRepetida2.get(j).get(l+1) )
                        )
                        {
                            conta.add(j);
                            conta.add(l);
                            conta.add(l+1);
                        }

                        l++;
                 }

                 k++;
             }
        }
      }

      for (int i = 0; i < conta.size(); i++)
      {
        listaRepetida2.get(conta.get(i)).remove(conta.get(i+1));
        listaRepetida2.get(conta.get(i)).remove(conta.get(i+1));
        i+=2;
      }

     String texto = "{";
     texto += "}";

     System.out.println(listaRepetida2);

     return texto;
  }
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo, aqui tem um caso onde eu pego uso duas listas para pegar o título de uma linha do excel e outra o valor correspondente... onde o índice do valor, eu criei um parâmetro Z

 

É mais para vc ver o conceito:

        int rows = sheet.getRows(); // Número da linha no Excel       
        int z = 0; // Posição da lista de resultado
        for (int i = 0; i < listaRes.size(); i++) { // Varrer a lista de resultado por tamanho	
        	for (int j=0; j < titulos.size(); j++){ // varrear a lista de títulos para pegar valor da coluna
       		
        		sheet.addCell(new Label(j, rows, listaRes.get(z), format.cellResult())); // add linha no excel
   				z++; // soma uma posição da lista
			} 
        	i = z-1; // add no índice da lista o valor anterior porque o z foi somado uma posição a mais;
        	rows = rows +1; // pula uma linha no arquivo excel
        }  

Caso não consiga, tente ler algo sobre matriz..

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.