Dividir Lista ((Resolvido))

Pessoal, eu tenho uma Lista Pessoa com os seguintes dados

String nome;
int idade;

nome Joao, idade 19
nome Maria, idade 19
nome Roberto, idade 19

nome Rodrigo, idade 10
nome Carla, idade 10

nome Nice, idade 15
nome Carlos, idade 15

nome Romario, idade 13

qual a melhor forma para separar essa lista em 5 novas listas pela idade?

faz um loop com for e depois separe cada intervalo de idade:

for (Pessoa p : lista)
if (p.idade > 20 && p.idade < 15 )
p1.add§ ;

if (p.idade > 21 && p.idade < 24)
p2.add§;

etc .

a questao eh por ex que tem que ser idade exata e não haverá um padrao…

pense que nessa lista pode ter desde 1 ano de idade até 100 anos por ex… sacou?

tem algo que podemos fazer ?

não , acho q não entendi …

vc quer dividir em 5 listas uma já existente, sem utilizar nenhum padrão .

Então como vamos dividir a lista ? por nome? Aleatoriamente? por inserção?

uma lista, tera por exemplo 500 itens, com nome e idades, certo?

essa lista deverá ser desfeita… e feita varias novas listas separadas por idade, certo?

agora a idade não é fixa… a idade irá variar de 1 a 100 por exemplo

entendeu? ou ainda está confuso?

Crias um Map de Listas, onde a key é a idade

nunca utilizei isso… pode me dar um exemplo? ou como faço para aprender isso por favor?

http://docs.oracle.com/javase/7/docs/api/java/util/Map.html

Para cada elemento da tua lista
    verifica idade
    se ainda não existe lista no mapa para a idade do elemento
        cria lista no mapa para a idade do elemento
    adiciona o elemento à lista respetiva do mapa

hummm estou vendo aqui… quando que o Map só esta salvando uma idade… se tem dois com a mesma idade e salva por cima permanecendo somente o último…

[code]
public final class UsandoHashMaps {

private final HashMap<Integer, Aluno> mapeamentoDeAlunos;

List<Aluno> listaAlunos = new ArrayList<Aluno>();
List<List<Aluno>> listaListaAlunos = new ArrayList<List<Aluno>>();


public UsandoHashMaps() {
    mapeamentoDeAlunos = new HashMap<Integer, Aluno>();

    Aluno aluno = new Aluno("Roberto", 10);
    listaAlunos.add(aluno);
    aluno = new Aluno("João", 12);
    listaAlunos.add(aluno);
    aluno = new Aluno("Maria", 12);
    listaAlunos.add(aluno);
    aluno = new Aluno("Rodrigo", 15);
    listaAlunos.add(aluno);
    aluno = new Aluno("Bruno", 13);
    listaAlunos.add(aluno);
    aluno = new Aluno("Carla", 12);
    listaAlunos.add(aluno);
    
    for (int i = 0; i < listaAlunos.size(); i++) {
         mapeamentoDeAlunos.put(listaAlunos.get(i).getIdade(), aluno);
    }

}[/code]

ai quando eu dou um:

System.out.println("Nome : " + mapeamentoDeAlunos.get(12).getNome()); System.out.println("Idade: " + mapeamentoDeAlunos.get(12).getIdade());

ele está retornando somente o último cadastro feito…

Isso é porque tu não estás a guardar uma lista dentro de cada entrada do Map, mas sim apenas um Aluno.

private final HashMap<Integer, List<Aluno>> mapeamentoDeAlunos;  
...
for (Aluno aluno: listaAlunos) {  
    if (mapeamentoDeAlunos.get(aluno.getIdade()) == null){ // ainda não existia nenhum aluno com esta idade
        mapeamentoDeAlunos.put(aluno.getIdade(), new ArrayList<Aluno>());  // cria lista vazia para esta idade
    }
        
    mapeamentoDeAlunos.get(aluno.getIdade()).add(aluno); // adiciona o aluno à lista por idades  
}  

blz, consegui fazer, agora só me resta uma ultima dúvida em relação a isso…

como eu faço para saber quais listas eu possuo?

se eu der um Size, vai me retornar a quantidade de listas, porem se eu utilizar por exemplo mapeamentoDeAlunos.get(0) se não tiver ninguem com 0 anos vai dar erro.

pra isso eu estou utilizando o seguinte código…

[code]
Set s = mapeamentoDeAlunos.entrySet();
Iterator it = s.iterator();

    while (it.hasNext()) {
        Map.Entry m = (Map.Entry) it.next();
        int key = (Integer) m.getKey();
        System.out.println(key);
    }[/code]

acho algo muito grande para saber somente essa informação… não existe algo mais simples?

edit:

Pessoal um codigo mais facil… rs…

for (Integer key : mapeamentoDeAlunos.keySet()) {

            System.out.println(key);
        }

obrigado pela ajuda de todos!