Duplicando saida ArrayList

Boa tarde, estou com um problema na saida dos meus dados de um arrayList, estão saindo duplicados.
Usei o println apenas para ter a saida, mais pra frente farei outras coisas com isso, porem preciso apenas das saidas exatas disso.
Segue o codigo

da classe para listar.

public ArrayList<TipoPizzas> arrayTipoPizza = new ArrayList<TipoPizzas>();;
 public void listar() {
        ResultSet rs = null;
        Connection cnn;

        try {
            cnn = new ConnectionFactory().getConnection();
            PreparedStatement sql = cnn.prepareStatement("select * from pizzas");
            rs = sql.executeQuery();
            while (rs.next()) {
                TipoPizzas tipo = new TipoPizzas();
                tipo.setSabor(rs.getString("nome"));
                tipo.setPreco(rs.getString("valor"));
                tipo.setImagem(rs.getString("imagem"));

                arrayTipoPizza.add(tipo);
            }
            
           for(TipoPizzas TP : arrayTipoPizza){
               System.out.println("Sabor: " + TP.getSabor());
               System.out.println("Valor: " + TP.getPreco());
        }

classe TiposPizzas

public class TipoPizzas implements Comparable<TipoPizzas>{
    private String sabor;
    private String preco;
    private String ingrediente;
    private String quantidade;
    private String imagem;
    
    @Override
 public int compareTo(TipoPizzas o) {
  return sabor.compareTo(o.getSabor());
 }

getters and setters...

Classe main q vai chamar o metodo de listar

public static void main(String[] args) throws IOException {
        VendaPizzas VP = new VendaPizzas();
        VP.setVisible(true);

        VP.listar();
    }
}

Fazendo assim, a saida esta sendo duplicada, tanto se eu fizer aleatório, quanto se eu usar o sort do Collections.

O seu método listar não deveria retornar a lista ?

No caso pelo que eu entendi ele esta populando um atributo, essa lista ta vazia?
Não seria melhor voltar essa lista, como o @ramilani12 falou?

ramilani1234m
O seu método listar não deveria retornar a lista ?

mas ai de qualquer jeito no retorno eu pegaria e faria o laço for igual esta no metodo Listar.
Creio que não faria diferença.

opa_roa9m
No caso pelo que eu entendi ele esta populando um atributo, essa lista ta vazia?
Não seria melhor voltar essa lista, como o @ramilani12 falou?

A lista esta populada pelo banco de dados por essa função

arrayTipoPizza.add(tipo);

Ele add no Array o TipoPizzas, um por um. O banco tem 100 linhas. Só que esta retornando 200 linhas.

while (rs.next()) {
TipoPizzas tipo = new TipoPizzas();
tipo.setSabor(rs.getString(“nome”));
tipo.setPreco(rs.getString(“valor”));
tipo.setImagem(rs.getString(“imagem”));
arrayTipoPizza.add(tipo);
}

no banco existem 100 registros, pela logica, ele deveria fazer essa contagem 100 vezes. Porem coloquei um contador pra ver, e ele esta fazendo 200 vezes. Então o erro esta ai =/
Poderia colocar uma instrução que contasse quantos registros tem e fizesse pra parar quando chegasse no numero total. Porem todos os lugares que vi fazendo esse metodo, é desse jeito q esta, então queria saber o motivo desse em si não dar certo.

ESQUECE TUDO…

Sou muito burro. estou chamando o metodo duas vezes… por essa razão esta duplicando.

Me desculpem. :sob:

Se vc retornasse a lista no seu método listar, perceberia que a referência das listas seriam diferentes :smiley:

Eu mudei.

public ArrayList<TipoPizzas> listar() {
        ResultSet rs = null;
        Connection cnn;

        try {
            cnn = new ConnectionFactory().getConnection();
            PreparedStatement sql = cnn.prepareStatement("select * from pizzas");
            rs = sql.executeQuery();

            while (rs.next()) {
                TipoPizzas tipo = new TipoPizzas();
                tipo.setSabor(rs.getString("nome"));
                tipo.setPreco(rs.getString("valor"));
                tipo.setImagem(rs.getString("imagem"));
                arrayTipoPizza.add(tipo);
            }
            return arrayTipoPizza;
            
             
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (Exception ex) {
            Logger.getLogger(VendaPizzas.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }