Passando dados de uma ArrayList para um array

13 respostas
Milk15

Galera, eu to tentando fazer com que um atributo dos componentes de um ArrayList seja passado para um Array, por exemplo:

Eu tenho um classe Pessoa, com os atributos idade,altura,peso. Eu armazeno 50 pessoas num arrayList e eu quero passar para array separados, os atributos das 50 pessoas, tipo…

int [] peso = os pesos da 50 pessoas;

int [] idade = as idades da 50 pessoas;

float [] altura = as alturas da 50 pessoas;

Como eu posso fazer isso??

Agradeço muito se puderem me ajudar, vlw!

13 Respostas

nextuser

loops aninhados

claudneto

int [] peso = new int[50]; int [] idade = new int[50]; double [] altura = new double[50]; List<Pessoa> list = new ArrayList<Pessoa>(); for (int i = 0; i < list.size(); i++) { peso[i] = list.get(i).getPeso(); idade[i] = list.get(i).getIdade(); altura[i] = list.get(i).getAltura(); }

Se eu não errei, isso funfa.

drsmachado

Claudneto, com certeza isto não funciona.
Se a lista é tipada, você precisa fazer um cast explícito.
Sendo assim, ficaria algo como

int [] peso = new int[50];  
            int [] idade = new int[50];  
            double [] altura = new double[50];  
            List<Pessoa> list = new ArrayList<Pessoa>();  
            for (int i = 0; i < list.size(); i++) {  
                Integer iTmp = (Integer) list.get(i).getPeso();
                peso[i] = iTmp.intValue();
                //segue a mesma logica aqui
            }
Milk15

Hmmmm, antes eu tava fazendo algo parecido como Claudnet colocou, tentei desse jeito e funcionou aqui drsmachado, valeu!!

Mas, altura é um double e ai ele ta passando pra int
então pra altura seria assim?

for (int i = 0; i < lista.size(); i++) { Double iTmp = (Double) lista.get(i).getAltura(); altura[i] = iTmp.doubleValue(); }

drsmachado

Na verdade, você deve fazer cast para qualquer tipo de objeto que esteja na lista.

Milk15

Valeu man! Consegui :smiley:

drsmachado

Apenas explicando.
Embora a lista seja “tipada” List<Object> objectList = new ArrayList<Object>(); ela ainda armazena objetos.
Para que se possa trabalhar com os dados contidos nela, é preciso que seja feita a conversão (cast) explícita para um objeto de mesmo tipo (ou que dê suporte) de objeto que a lista contém

nel

É, tente fazer isso, List, não aceita. Double, char…tipos primitivos.
Por isso a explicação do nosso amigo de utilizar o cast.

Abraços!

drsmachado

Complementando.
Como a List<?> recebe apenas Objects não é possível fazer a conversão direta

int inteiro = (int) listaDeObjects.get(num);

Ele gera um erro, pois se trata de 2 coisas alheias.
Para isto, é preciso fazer cast com um Object como Integer, Double, Float, Boolean, etc e aí obter o valor correspondente.

Lucas_Rinaldi
int[] peso = new int[50];
		int[] idade = new int[50];
		double[] altura = new double[50];
		
		List<Pessoa> list = new ArrayList<Pessoa>();
		
		Pessoa pe = new Pessoa();
		pe.setIdade(5);
		pe.setAltura(5);
		pe.setPeso(5);
		list.add(pe);

		peso[0] = list.get(0).getPeso();
		idade[0] = list.get(0).getIdade();
		altura[0] = list.get(0).getAltura();
		
		System.out.println(peso[0] + "" + idade[0] + "" + altura[0]);

@drsmachado
Porque esse código estaria errado?

É o mesmo do claudneto

nel
Lucas Rinaldi:
int[] peso = new int[50];
		int[] idade = new int[50];
		double[] altura = new double[50];
		
		List<Pessoa> list = new ArrayList<Pessoa>();
		
		Pessoa pe = new Pessoa();
		pe.setIdade(5);
		pe.setAltura(5);
		pe.setPeso(5);
		list.add(pe);

		peso[0] = list.get(0).getPeso();
		idade[0] = list.get(0).getIdade();
		altura[0] = list.get(0).getAltura();
		
		System.out.println(peso[0] + "" + idade[0] + "" + altura[0]);

@drsmachado
Porque esse código estaria errado?

É o mesmo do claudneto

Leu o que foi dito acima? Se leu, leia novamente e dessa vez com atenção.

Lucas_Rinaldi

Li novamente, e li com atencao de novo e mesmo assim nao entendi o porque do erro, o compilador nao acusa nada e em tempo de execucao tambem nao acontece problema nenhum.

Entao se puder explicar de novo agradeceria ou nem se de ao trabalho de comentar.

ViniGodoy

Funciona sim. Ele viajou na maionese. Você não precisa fazer cast explícito porque o método getPeso() já retorna o tipo concreto.

Aliás, a grande utilidade de uma lista tipada é justamente evitar o cast explícito.

O que não daria certo é um list com Wildcards List<?>, ou se vc usar um list de uma superclasse, mas quiser usar como um dado da subclasse (pegar um Integer (subclasse) dentro uma lista de Object (superclasse)).

Criado 6 de maio de 2011
Ultima resposta 6 de mai. de 2011
Respostas 13
Participantes 7