I have a list and how do I display all the elements?

1

This method only returns me to the last position in the list, the others it does not show. How do I display all the same?

    Agente agente = new Agente();
    List<Agente> lista = getA();

    for(Agente a: lista){
        System.out.println(a.getQuantidade());
    }



    //System.out.println(lista.get(0).getQuantidade());
    }

    public static List<Agente> getA(){
        List<Agente> lista = new ArrayList<Agente>();
        Agente agente = new Agente();
        agente.setQuantidade("2");
        agente.setQuantidade("5");
        agente.setQuantidade("9");
        agente.setQuantidade("7");
        lista.add(agente);
        return lista;

    }
}

That works, but I think it got really ugly:

public static List<Agente> getA(){
    List<Agente> lista = new ArrayList<Agente>();
    Agente agente;
    agente = new Agente();
    agente.setQuantidade("2");
    lista.add(agente);
    agente = new Agente();
    agente.setQuantidade("5");
    lista.add(agente);
    agente = new Agente();
    agente.setQuantidade("9");
    lista.add(agente);
    agente = new Agente();
    agente.setQuantidade("7");
    lista.add(agente);
    return lista;

}

How can I improve this?

    
asked by anonymous 30.01.2017 / 00:05

1 answer

2

Note this code:

public static List<Agente> getA(){
    List<Agente> lista = new ArrayList<Agente>();
    Agente agente = new Agente();
    agente.setQuantidade("2");
    agente.setQuantidade("5");
    agente.setQuantidade("9");
    agente.setQuantidade("7");
    lista.add(agente);
    return lista;

}

It creates a (and only one) instance of Agente and sets the amount to 2. Then it sets to 5 in the same instance . Then to 9 and to 7. He is always setting that amount in the same instance. Therefore, only the last defined value is what counts. The resulting list will only have a single element, after all the add method was only called once.

Already in this way, you create several instances, arrow the amount of each of them independent of the others and add each one of them in the list:

public static List<Agente> getA(){
    List<Agente> lista = new ArrayList<Agente>();
    Agente agente;
    agente = new Agente();
    agente.setQuantidade("2");
    lista.add(agente);
    agente = new Agente();
    agente.setQuantidade("5");
    lista.add(agente);
    agente = new Agente();
    agente.setQuantidade("9");
    lista.add(agente);
    agente = new Agente();
    agente.setQuantidade("7");
    lista.add(agente);
    return lista;

}

Well, I do not know what it is that you want to do with this list. But one way to improve this code here is as follows:

public static List<Agente> getA() {
    int[] quantidades = {2, 5, 9, 7};
    List<Agente> lista = new ArrayList<Agente>();
    for (int q : quantidades) {
        Agente agente = new Agente();
        agente.setQuantidade(String.valueOf(q));
        lista.add(agente);
    }
    return lista;
}

However, I do not know if this code will be useful to you in your project as a whole, since the data you enter is a very specific and arbitrary sequence of numbers. But, anyway, that's the way, it's to use a for loop.

    
30.01.2017 / 00:29