Acumular valor dentro do laço for e adicionar em outro array

Tenho uma Lista que contem objetos do tipo CompraDeProdutos.

Minha duvida e o seguinte, preciso percorrer o ArrayList dessa classe e gerar um novo array com o relatório do total a pagar por fornecedor, ou seja tenho que manter o fornecedor mas acumular os valores de total a pagar, do jeito que estou fazendo eu estou filtrando e adicionando denovo no outro array apenas os dois atributos requeridos,porém ele gera uma entrada por vez, como faço pra gerar uma unica entrada por fornecedor mas com o total a pagar acumulado ?

Classe CompraDeProdutos :

 package Sistema;

 import java.util.Iterator;
 import java.util.List;


public class CompraDeProdutos {
private int notaFiscal;
private Produto produto;
private String data;
private Fornecedor fornecedor;
private int quantidade;
private double totalApagar;

public List <Produto> getLista(){
    return Dados.listaProdutos;
}

public CompraDeProdutos(int notaFiscal, Produto produto, String data, Fornecedor fornecedor, int quantidade, double totalApagar) {
    this.notaFiscal = notaFiscal;
    this.produto = produto;
    this.data = data;
    this.fornecedor = fornecedor;
    this.quantidade = quantidade;
    this.totalApagar = totalApagar;
}

  

public int getNotaFiscal() {
    return notaFiscal;
}

public void setNotaFiscal(int notaFiscal) {
    this.notaFiscal = notaFiscal;
}

public String getData() {
    return data;
}

public void setData(String data) {
    this.data = data;
}

public double getTotalApagar() {
    return produto.getCusto()*getQuantidade();
}

public void setTotalApagar(double totalApagar) {
    this.totalApagar =totalApagar;
}

public Produto getProduto() {
    return produto;
}

public void setProduto(Produto produto) {
    this.produto = produto;
}

public Fornecedor getFornecedor() {
    return fornecedor;
}

public void setFornecedor(Fornecedor fornecedor) {
    this.fornecedor =fornecedor;
}

public CompraDeProdutos() {
   
}



public int getQuantidade() {
    return quantidade;
}

public void setQuantidade(int quantidade) {
    this.quantidade = quantidade;
}

/*
@Override
public String toString() {
    return   "" +getFornecedor().getCodigo()+";"+getTotalApagar()+";";
}
*/

@Override
public String toString() {
    return  "" + getNotaFiscal() + ";" +getFornecedor().getCodigo()+";" + getData() + ";" + getProduto().getCodigo()+ ";" + getQuantidade() + ";"+getTotalApagar()+";";
}

@Override
public int hashCode() {
    int hash = 3;
    hash = 11 * hash + this.notaFiscal;
    return hash;
}

@Override
public boolean equals(Object obj) {
    if (this == obj) {
        return true;
    }
    if (obj == null) {
        return false;
    }
    if (getClass() != obj.getClass()) {
        return false;
    }
    final CompraDeProdutos other = (CompraDeProdutos) obj;
    if (this.notaFiscal != other.notaFiscal) {
        return false;
    }
    return true;
    }
}

Método que estou utilizando :

 public void relatorioFornecedor(List<CompraDeProdutos> listaCompras){
    
    Iterator<CompraDeProdutos> it = Dados.listaCompras.iterator();
    Iterator<CompraDeProdutos> ite= Dados.listaRelatorio1.iterator();
    CompraDeProdutos obj =new CompraDeProdutos();
    while(it.hasNext()){
        CompraDeProdutos e = it.next();
        
        if(e.getFornecedor().equals(obj.getFornecedor())){
            obj.setFornecedor(e.getFornecedor());
            obj.setProduto(e.getProduto());
            obj.setQuantidade(obj.getQuantidade());
            obj.setTotalApagar(e.getTotalApagar());
            Dados.listaRelatorio1.add(obj);
        }
        System.out.println(Dados.listaRelatorio1);
        break;
  }
    
    while(ite.hasNext()){
        CompraDeProdutos i = it.next();
        
        if(i.getFornecedor().equals(obj.getFornecedor()))
        {
            obj.setFornecedor(i.getFornecedor());
            obj.setProduto(i.getProduto());
            obj.setQuantidade(i.getQuantidade());
            obj.setTotalApagar(i.getTotalApagar()+obj.getTotalApagar());
            Dados.listaRelatorio1.remove(i);
            Dados.listaRelatorio1.add(obj);
        }
        break;
    }
    System.out.println(Dados.listaRelatorio1);
  }
}

Mesma coisa que neste tópico.

Crie um método de busca na classe Dados assim:

public List<CompraDeProdutos> buscarCompraDeProdutosPorFornecedor(f) {
  List<CompraDeProdutos> resultado = new ArrayList<>();
  for(CompraDeProdutos cp: listaCompras) {
    if (cp.getCodigoDoFornecedor() == f.getCodigo()) resultado.add(cp);
  }
  return resultado;
}

Se quiser o total, em algum lugar:

public double calcularTotalAPagar(List<CompraDeProdutos> lista) {
  double total = 0;
  for(CompraDeProdutos cp: listaCompras) {
    total += cp.getTotalApagar();
  }
  return total;
}

Portando o relatório será:

  List lista = dados.buscarCompraDeProdutosPorFornecedor(f);
  double total = calcularTotalAPagar(lista);
  println(lista);
  println("Total a pagar: " total);
1 curtida

Valeu :slight_smile: consegui implementar da maneira que precisava, desculpa se o post foi meio repetido, mas a lógica falhou