Atribuir dados de ArrayList a objetos

1 resposta Resolvido
javaarraylist
R

Através do Scanner, leio um arquivo .htm e passo os dados nele contido para um ArrayList de String. Preciso atribuir esses dados do ArrayList a objetos “jogo”. A classe Jogo já existe, com todos os atributos, getters e setters…

A lista está assim:

1 (primeiro atributo do primeiro objeto jogo)
11/03/1996
04
05
30
33
41
52
0,00
0
0,00
17
39.158,92
2016
330,21
1.714.650,23
0,00
0,00
2 (primeiro atributo do segundo objeto jogo)
18/03/1996
...

Esses dados já estão na ordem em que serão atribuídos, portanto, do 1º dado (índice 0 do ArrayList) ao 18º dado (índice 17 do ArrayList) é um só jogo. Do 19º ao 36º outro jogo…

O seguinte código funciona:

private static void setJogos(List<String> listaSorteios) {

    int linha = 0;
    jogo = new Jogo();
    listaJogos.add(jogo);

    for (int u = 0; u < listaSorteios.size(); u++) {

        if (linha > 17) {
            linha = 0;
            jogo = new Jogo();
            listaJogos.add(jogo);
        }

        switch (linha) {
            case 0:
                jogo.setConcurso(Integer.parseInt(listaSorteios.get(u)));
                break;
            case 1:
                jogo.setDataSorteio(listaSorteios.get(u));
                break;
            case 2:
                jogo.setPrimeiraDezena(Integer.parseInt(listaSorteios.get(u)));
                break;
            case 3:
                jogo.setSegundaDezena(Integer.parseInt(listaSorteios.get(u)));
                break;
            case 4:
                jogo.setTerceiraDezena(Integer.parseInt(listaSorteios.get(u)));
                break;
            case 5:
                jogo.setQuartaDezena(Integer.parseInt(listaSorteios.get(u)));
                break;
            case 6:
                jogo.setQuintaDezena(Integer.parseInt(listaSorteios.get(u)));
                break;
            case 7:
                jogo.setSextaDezena(Integer.parseInt(listaSorteios.get(u)));
                break;
            case 8:
                break;
            case 9:
                jogo.setNumGanhadoresSena(Integer.parseInt(listaSorteios.get(u)));
                break;
            case 10:
                jogo.setRateioSena((listaSorteios.get(u)));
                break;
            case 11:
                jogo.setNumGanhadoresQuina(Integer.parseInt(listaSorteios.get(u)));
                break;
            case 12:
                jogo.setRateioQuina((listaSorteios.get(u)));
                break;
            case 13:
                jogo.setNumGanhadoresQuadra(Integer.parseInt(listaSorteios.get(u)));
                break;
            case 14:
                jogo.setRateioQuadra((listaSorteios.get(u)));
                break;
            case 15:
                jogo.setEstimativaPremio((listaSorteios.get(u)));
                break;
            case 16:
                break;
            case 17:
                break;
        }
        linha++;
    }
}

porém, não estou seguro que esta seja a melhor forma. Alguém sugere algo melhor?

Obrigado pela atenção!

1 Resposta

P
Solucao aceita

tem razão, não é a melhor forma.

eu penso da seguinte forma: vc tem um arquivo onde a cada 17 linhas vc representa um objeto em particular.

seria mais logico vc dividir as suas ações em duas

  1. vc cria um List<List<String>> onde cada item é um agrupamento de 17 linhas.

  2. vc cria um factory que sabe transformar uma List<String> em objeto.

vou dar um exemplo mais simples

List<List<String>> jogos = new ArrayList<List<String>>();
List<String> jogoAtual = new ArrayList<String>();

for (int linha = 0; linha < listaSorteios.size(); linha++) {
  if ( u > 0 && u % 17 == 0) { /* o que sera isso ? o resto da divisão !*/
     jogos.add(jogoAtual); 
     jogoAtual = new ArrayList<String>();
  }
  jogoAtual.add( jogos.get(u) );
}

/* aqui o list jogos deve ter X lists contendo 17 linhas */

agora vc pode criar uma classe FabricaDeJogos que vai ter um metodo estatico criarJogo( List<String> atributos), vc cria o objeto la dentro e retorna.

faça um teste com 2 tipos de atributos( concurso e data) e veja se faz sentido. eu posso ter me enganado com a condição do IF )

Criado 8 de setembro de 2016
Ultima resposta 8 de set. de 2016
Respostas 1
Participantes 2