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);
}
}