I have a List that contains objects of the type of ProductBuy.
My question is the following, I need to go through the ArrayList of this class and generate a new array with the total payable per vendor report, that is, I have to keep the vendor but accumulate the total amounts to pay, the way I am so I'm filtering and adding again in the other array just the two attributes required, but it generates one entry at a time, how do I generate a single entry per vendor but with the total payable?
Product Buying Class:
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;
}
}
Method that I'm using:
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);
}
}