Juntar ArrayList

E ae pessoal.
Tenho dois ArrayList de tamanhos diferentes e gostaria de junta-los em um. O que realmente me atrapalha é que, quero que ao final da linha zero do Array1 comece a linha zero do Array2, e assim por diante até que termine o maior dos dois.

O que realmente quero juntando esses dois arrays é exibi-los em uma tabela, os valores de um ao lado dos valores do outro. Se houver um jeito de juntar dois tablemodels ou coisa assim tambem resolve.
Qualquer dica agradeço.
Valew

Deixa eu ver se entendi o que você quer.

Você tem um ArrayList com 10 itens e um ArrayList com 20 itens.

Vamos supor. al1 = {1,2,3,4,5,6,7,8,9,10} e al2 = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20}.

Como você quer os elementos no novo ArrayList?

Assim?

{1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,12,13,14,15,16,17,18,19,20}?

[code]import java.util.ArrayList;

public class Teste {

public static void main(String args[]) {

	ArrayList lista1 = new ArrayList();
	ArrayList lista2 = new ArrayList();
	ArrayList lista3 = new ArrayList();

	lista1.add("1a");
	lista1.add("1b");
	lista1.add("1c");
	lista1.add("1d");
	lista1.add("1e");
	lista1.add("1f");

	lista2.add("2a");
	lista2.add("2b");
	lista2.add("2c");

	for (int i = 0; i < lista1.size(); i++) {
		if (lista2.size() > i) {
			String nome1 = (String) lista1.get(i);
			String nome2 = (String) lista2.get(i);
			lista3.add(nome1);
			lista3.add(nome2);
		}else{
			String nome1 = (String) lista1.get(i);
			lista3.add(nome1);
		}
	}

	for (int i = 0; i < lista3.size(); i++) {
		String nome = (String) lista3.get(i);
		System.out.println(nome);
	}

}

}
[/code]

Não sei se isso é realmente que o snoop quer, mas caso seja. Sugiro as seguintes modificações no código.

[quote=Tiburcio_Mancha][code]import java.util.ArrayList;

public class Teste {

public static void main(String args[]) {

	ArrayList<String> lista1 = new ArrayList<String>();
	ArrayList<String> lista2 = new ArrayList<String>();
	ArrayList<String> lista3 = new ArrayList<String>();

	lista1.add("1a");
	lista1.add("1b");
	lista1.add("1c");
	lista1.add("1d");
	lista1.add("1e");
	lista1.add("1f");

	lista2.add("2a");
	lista2.add("2b");
	lista2.add("2c");

	for (int i = 0; i < lista1.size(); i++) {
		if (lista2.size() > i) {
			String nome1 = lista1.get(i);
			String nome2 = lista2.get(i);
			lista3.add(nome1);
			lista3.add(nome2);
		}else{
			String nome1 = lista1.get(i);
			lista3.add(nome1);
		}
	}

	for (int i = 0; i < lista3.size(); i++) {
		String nome = lista3.get(i);
		System.out.println(nome);
	}

}

}
[/code][/quote]

Retirei o typecasting pra String ao longo do código e na declaração do ArrayList informei que é um ArrayList de String. Existem várias vantagens nisso.

ah sim, com certeza…cabe a ele agora, sabendo a lógica necessária, utilizar as boas práticas de programação (isso se for isso mesmo q ele quer)

juntar dois ArrayList em um só



List listA = ... // uma lista com elementos
List listB = ... // uma lista com elementos

List resultado = new ArrayList(listaA.size()+ listB.size());
resultado.addAll(listaA);
resultado.addAll(listaB);

Não se ponham a fazer fors…

Você tentou utilizar a funcionalidade da própria API?

http://java.sun.com/javase/6/docs/api/java/util/ArrayList.html

Prezados hiram e sergiotaborda,

O snoop, pelo que entendi, não quer colocar os elementos de um ArrayList concatenados no final do outro.

Pelo que entendi, ele quer intercalar os elementos. Por isso o “for” que o amigo Tiburcio_Mancha sugeriu.

[quote=sergiotaborda]juntar dois ArrayList em um só



List listA = ... // uma lista com elementos
List listB = ... // uma lista com elementos

List resultado = new ArrayList(listaA.size()+ listB.size());
resultado.addAll(listaA);
resultado.addAll(listaB);

Não se ponham a fazer fors…[/quote]

Sim, esta solução acho que não se aplica ao problema ae do nosso amigo…
Apesar dos fors, acho que o código que fiz resolve, mas tb podem existir (e deve mesmo pq fiz isso ae correndo,rs) outras implementações melhores…

Capisco!

Não serviria a sugestão do sérgio + um:

 Collections.sort(meuArrayList);

No final?

[quote=Tchello] Não serviria a sugestão do sérgio + um:

 Collections.sort(meuArrayList);

No final?[/quote]

Serviria se os arrays estivessem em ordem, como no meu exemplo. Mas não sei como estão os arrays do problema do snoop, que por sinal, parece que tá menos interessado na dúvida dele que todos nós. hahahahah

Valeu a ajuda gente. E desculpa a demora para dar uma olhada no topico, ontem e hoje está dificil aqui na empresa.
Mas como disse agradeço a ajuda.

O codigo que o pablosaraiva demonstrou não resolve o meu caso. Faltaram alguns detalhes.

Possuo dois ArrayLists de arrays de Strings, ou seja…

ArrayList array1 = new ArrayList();
ArrayList array2 = new ArrayList();

array1.add(new String[]{"1a","1b","1c","1d","1f","1g"});
array1.add(new String[]{"2a","2b","2c","2d","2f","2g"});
array1.add(new String[]{"3a","3b","3c","3d","3f","3g"});

array2.add(new String[]{"4a","4b","4c"});
array2.add(new String[]{"5a","5b","5c"});
array2.add(new String[]{"6a","6b","6c"});
array2.add(new String[]{"7a","7b","7c"});
array2.add(new String[]{"8a","8b","8c"});
array2.add(new String[]{"9a","9b","9c"});

E juntando esses dois ArrayList (array1 e array2), gostaria de obter um array de String[] ou ArrayList, o que tiver menor custo, com este formato:

“1a”,“1b”,“1c”,“1d”,“1f”,“1g”, “4a”,“4b”,“4c”
“2a”,“2b”,“2c”,“2d”,“2f”,“2g”, “5a”,“5b”,“5c”
“3a”,“3b”,“3c”,“3d”,“3f”,“3g”, “6a”,“6b”,“6c”
“” , “” , “” , “” , “” , “” , “7a”,“7b”,“7c”
“” , “” , “” , “” , “” , “” , “8a”,“8b”,“8c”
“” , “” , “” , “” , “” , “” , “9a”,“9b”,“9c”

Ja fiz varias tentativas mas da td quanto é tipo de erro. Ai resolvi pedir uma luz para o pessoal aqui.
Valew!

Olha só…

Você está querendo transformar suas duas listas em uma matriz.

Primeiro, quando você está colocando os valores na lista 1, ela está ficando assim:

{“1a”,“1b”,“1c”,“1d”,“1f”,“1g”,“2a”,“2b”,“2c”,“2d”,“2f”,“2g”,“3a”,“3b”,“3c”,“3d”,“3f”,“3g”}

Como o seu programa vai saber em que posição ele vai quebrar a lista? A quantidade de colunas é fixa? São sempre 3 linhas?

Se forem sempre 3 linhas, é fácil dividir o número de elementos por três, se o número de colunas for fixo também é fácil contar. Agora, se esses valores não tiverem um padrão, você vai precisar ter uma regra para dividir isso nas suas linhas da matriz.

Bom… tendo dividido essas linhas na sua matriz, agora vem a parte de acrescentar a segunda lista.

{“4a”,“4b”,“4c”,“5a”,“5b”,“5c”,“6a”,“6b”,“6c”,“7a”,“7b”,“7c”,“8a”,“8b”,“8c”,“9a”,“9b”,“9c”}

Novamente, você precisa de um método para dividir essa lista em linhas.

Mas agora vem a complicação.

A primeira linha da segunda lista será acrescentada à primeira linha da sua matriz, ok.

Agora você precisa contar o número de colunas resultante.

Enquanto tiverem linhas preenchidas na matriz, concatene no final.

Quando não tiver mais (no caso citado, a partir da linha 4), você precisa criar elementos vazios de forma que ao concatenar, sua matriz fique com o número certo de colunas.

A melhor maneira de fazer isso seria implementar a tal classe Matriz que tivesse todas essas suas regrinhas e que você pudesse acrescentar as linhas diretamente na matriz, ou receber as duas listas para montar a matriz.

Agora… sinceramente… eu acho que existe maneira melhor de fazer o que você está pensando em fazer, pois isso aqui não tá nada bonito.

Eu tô falando como fazer o que você disse que quer, mas se você dividir o problema real conosco, tenho certeza que aparecerão soluções MUITO mais elegantes.

Um abraço, boa sorte.

[quote=pablosaraiva]Olha só…

Você está querendo transformar suas duas listas em uma matriz.

Primeiro, quando você está colocando os valores na lista 1, ela está ficando assim:

{“1a”,“1b”,“1c”,“1d”,“1f”,“1g”,“2a”,“2b”,“2c”,“2d”,“2f”,“2g”,“3a”,“3b”,“3c”,“3d”,“3f”,“3g”}

Como o seu programa vai saber em que posição ele vai quebrar a lista? A quantidade de colunas é fixa? São sempre 3 linhas?

Se forem sempre 3 linhas, é fácil dividir o número de elementos por três, se o número de colunas for fixo também é fácil contar. Agora, se esses valores não tiverem um padrão, você vai precisar ter uma regra para dividir isso nas suas linhas da matriz.

Bom… tendo dividido essas linhas na sua matriz, agora vem a parte de acrescentar a segunda lista.

{“4a”,“4b”,“4c”,“5a”,“5b”,“5c”,“6a”,“6b”,“6c”,“7a”,“7b”,“7c”,“8a”,“8b”,“8c”,“9a”,“9b”,“9c”}

Novamente, você precisa de um método para dividir essa lista em linhas.

Mas agora vem a complicação.

A primeira linha da segunda lista será acrescentada à primeira linha da sua matriz, ok.

Agora você precisa contar o número de colunas resultante.

Enquanto tiverem linhas preenchidas na matriz, concatene no final.

Quando não tiver mais (no caso citado, a partir da linha 4), você precisa criar elementos vazios de forma que ao concatenar, sua matriz fique com o número certo de colunas.

A melhor maneira de fazer isso seria implementar a tal classe Matriz que tivesse todas essas suas regrinhas e que você pudesse acrescentar as linhas diretamente na matriz, ou receber as duas listas para montar a matriz.

Agora… sinceramente… eu acho que existe maneira melhor de fazer o que você está pensando em fazer, pois isso aqui não tá nada bonito.

Eu tô falando como fazer o que você disse que quer, mas se você dividir o problema real conosco, tenho certeza que aparecerão soluções MUITO mais elegantes.

Um abraço, boa sorte.[/quote]

O que preciso é que dois arrays de dois selects fiquem lado a lado para serem exibidos em uma unica tabela, é um modo para facilitar a visualização do usuario.
Gostaria de juntar os arrays pq são os elementos que uso para popular a JTable, mas qqr solução que popule a JTable daquela forma serve.

Agora entendi perfeitamente.

Você vai buscar dados numa base e tem duas queries.

A primeira query vai retornar 6 colunas e a segunda querie vai te retornar 3 colunas.

Sugestão 1: Por que não fazer um join e retornar as 9 colunas que você quer e jogar no seu JTable?

Sugestão 2: Use as colunas 1 a 6 do seu JTable para colocar os dados da primeira query e as colunas 7 a 9 parar colocar os dados da segunda.

Agora uma dica boa de verdade:

Crie objetos que representem as entidades do seu problema.

Ao ler os dados da base, coloque as informações nos objetos corretos.

Com os objetos na memória, já com os dados no lugar certo, exiba tranquilamente os dados no JTable.

[quote=pablosaraiva]Agora entendi perfeitamente.

Você vai buscar dados numa base e tem duas queries.

A primeira query vai retornar 6 colunas e a segunda querie vai te retornar 3 colunas.

Sugestão 1: Por que não fazer um join e retornar as 9 colunas que você quer e jogar no seu JTable?

Sugestão 2: Use as colunas 1 a 6 do seu JTable para colocar os dados da primeira query e as colunas 7 a 9 parar colocar os dados da segunda.[/quote]

Join até onde eu sei - quer dizer pode ser que de mas eu não tenho nem ideia de como fazer - não da pq essas tabelas não se relacionam, não tenho nada em comum entre elas.
Quanto a criar dois objetos, cada um correspondente a uma tabela, não daria o mesmo problema que estou tendo com os arrays para junta-los?

1 - Se não há relação, não há motivos para mostrar lado a lado. Crie um JTable para cada um.

2 - Abstrair seus dados em objetos é uma boa prática sempre. Ao concatenar cada linha da sua query ao final de uma lista, você está “misturando” os dados. Ao colocar cada informação em um objeto, você estaria deixando cada objeto representante da entidade com seus próprios dados, o que sempre facilita.

[quote=pablosaraiva]1 - Se não há relação, não há motivos para mostrar lado a lado. Crie um JTable para cada um.

2 - Abstrair seus dados em objetos é uma boa prática sempre. Ao concatenar cada linha da sua query ao final de uma lista, você está “misturando” os dados. Ao colocar cada informação em um objeto, você estaria deixando cada objeto representante da entidade com seus próprios dados, o que sempre facilita.[/quote]

São duas tabelas despesas e pagamentos, é por uma questão de facilidade para a visualização. Na data que gastou tanto quanto recebeu e por ai vai.
Exibindo em duas tabelas separadas ja estou.
Entendo que facilite separar como classes mas nesse caso não traria nenhuma facilidade, certo?