Popular uma Jtable com Array do tipo Itens Serviço

Estou tentando implementar o evento do botão de Adicionar, cuja intenção é adicionar o serviço na tabela com código, descrição, qtde, valUnitario e total.
Fiz um array para percorrer as linhas da tabela e verificar se o serviço já existe na mesma, se existir incrementa a qtde. Minha dúvida é como fazer um addRow para um Array
Fiz uma TableModel chamada TableModelItensServico segue abaixo o código.

public class TableModelItensServico extends AbstractTableModel
{

    private List<ItensServico> dados = new ArrayList<>();
    private String[] colunas =
    {
        "CÓDIGO", "SERVIÇO", "QTDE", "VALOR", "TOTAL"
    };

    @Override
    public String getColumnName(int coluna)
    {
        return colunas[coluna];
    }

    @Override
    public int getRowCount()
    {
        return dados.size();
    }

    @Override
    public int getColumnCount()
    {
        return colunas.length;
    }

    @Override
    public Object getValueAt(int linha, int coluna)
    {
        switch (coluna)
        {
            case 0:
                return dados.get(linha).getCodigo();
            case 1:
                return dados.get(linha).getServico().getDescricao();
            case 2:
                return dados.get(linha).getQuantidade();
            case 3:
                return dados.get(linha).getPrecounitario();
            case 4:
                return dados.get(linha).getTotal();
        }

        return null;
    }

    public void addRow(ItensServico is)
    {
        this.dados.add(is);
        this.fireTableDataChanged();
    }

    public void removeRow(int linha)
    {
        this.dados.remove(linha);
        this.fireTableRowsDeleted(linha, linha);
    }
}

E o código abaixo é para adicionar na tabela

private void insereItem()
{
    if (txtQtde.getValue().equals(0))
    {
        JOptionPane.showMessageDialog(this, "Informe uma quantidade para adicionar o serviço na tabela", "Atenção", JOptionPane.ERROR_MESSAGE);
        txtQtde.setBorder(BorderFactory.createLineBorder(Color.RED));
    } else
    {
        try
        {
            txtQtde.setBorder(BorderFactory.createLineBorder(Color.GRAY));
            
            String valUni = txtValor.getText().replace("R$", "").replace(" ", "").replace(".", "").replace(",", ".");
            double vtt = Double.parseDouble(valUni) * Integer.parseInt(txtQtde.getValue().toString());

            String total = String.valueOf(vtt);
            if (total.substring(total.lastIndexOf(".") + 1).length() < 2)
            {
                total = total + "0";
            }
            String unitario = txtValor.getText().replace("R$", "").replace(" ", "").replace(".", "").replace(",", ".");
            if (unitario.substring(unitario.lastIndexOf(".") + 1).length() < 2)
            {
                unitario = unitario + "0";
            }

            ItensServico is = new ItensServico();
            is.setCodigo(Integer.parseInt(txtCodigoServico.getText()));
            is.setServico((Servico) cbbServico.getSelectedItem());
            is.setQuantidade(Integer.parseInt(txtQtde.getValue().toString()));
            is.setPrecounitario(Double.parseDouble(unitario));
            is.setTotal(Double.parseDouble(total));
            
            
            boolean ok = true;
            for (int i = 0; i < itens.size(); i++)
            {
                if (itens.get(i).getServico().getCodigo() == is.getServico().getCodigo())
                {
                    itens.get(i).setQuantidade(itens.get(i).getQuantidade() + Integer.parseInt(txtQtde.getValue().toString()));
                    itens.get(i).setTotal(itens.get(i).getQuantidade() * itens.get(i).getPrecounitario());
                    ok = false;
                }

            }
            if (ok)
            {
                itens.add(is);
            }

           
            tableModel.addRowArray(itens);

            double valorSubTotal = vtt + Double.parseDouble(txtSubTotal.getText().replace("R$", "").replace(" ", "").replace(".", "").replace(",", "."));
            setValorSubTotal(valorSubTotal);
            atualizaSoma();
            
            
        } catch (Exception e)
        {
        }
    }
}

Bom, se eu entendi vc quer passar um array de ItensServico para o addRow né, bom tu pode criar um método com o mesmo nome só que com o parâmetro recebendo uma lista, Pois a Classe List tem um método chamado addAll(); que vc passa um array e ele pega cada objeto desse array e coloca na lista. ex:

public void addRow(List<ItensServico> isArray)
    {
        this.dados.addAll(isArray);
        this.fireTableDataChanged();
    }
1 curtida

Deu certo, mas agora ele insere o serviço, altera a quantidade, mas insere uma nova linha com o mesmo produto. Olha só, não sei o que eu possa estar fazendo de errado.

Pois é mano, tem q debugar seu código, o que pode ta acontecendo é que vc está adicionando o mesmo dado duas vezes.