Atribuir um objeto de uma lista como atributo de outra classe[Resolvido]

Estou fazendo a importação de dados através de arquivo txt, e empaquei nessa classe que tem dois atributos do tipo objeto,fornecedor e produto, quando leio o arquivo txt passo como parametro apenas o codigo dos mesmo, e tento verificar na lista se existem, e se sim os adiciono como atributo. porém diferentes dos outros metodos de importacao que fiz antes, esse nao esta adicionando de nenhum jeito .

segue o código do metodo

public static void main(String[] args) {
    


    File arquivo = new File("C:\\Users\\itach\\Desktop\\RegistroCompras.txt");
    try{
    
    Scanner  scanner = new Scanner(arquivo);
   
    DaoContasPagar dao = new DaoContasPagar();
    while(scanner.hasNextLine()){
        
        String s[];
        
        s=(scanner.nextLine().split(";"));
        CompraDeProdutos obj = new CompraDeProdutos();
        
        int numeronf = Integer.parseInt(s[0]);
        obj.setNotaFiscal(numeronf);
        int codigoF=Integer.parseInt(s[1]);
        obj.getFornecedor().setCodigo(codigoF);
        for(Fornecedor lista : Dados.listaFornecedores){
            if(lista.getCodigo()==codigoF){
                obj.setFornecedor(lista);
           }
            else
                {
                    System.out.println("fornecedor nao existe");
                      
                        } 
        }
        obj.setData(s[2]);
        int codigoP= Integer.parseInt(s[3]);
        
        for(Produto lista : Dados.listaProdutos){
            if(lista.getCodigo()==codigoP){
                obj.setProduto(lista);
                
            }
            else
                {
                    System.out.println("fornecedor nao existe");
                      
                        } 
            }
    
        int quantidade=Integer.parseInt(s[4]);
        obj.setQuantidade(quantidade);
        dao.NovaCompra(obj);
        
        }

    }
    catch(Exception e){
        
    }
}

e a classe do qual estou gerando um novo objeto, com os dados importados.

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

public void setTotalApagar(int 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  "" + getNotaFiscal() + ";" +getFornecedor().getCodigo()+";" + getData() + ";" + getProduto()+ ";" + 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;
}

}

Pode ser muitas coisas, mas sugiro melhorar um pouco o código.

Na classe Dados, adicione os métodos buscarFornecedorPorCodigo e buscarProdutoPorCodigo:

public Fornecedor buscarFornecedorPorCodigo(int codigo) {
  for(Fornecedor f: Dados.listaFornecedores){
    if(f.getCodigo() == codigo){
      return f;
    }
  }
  return null; // não encontrou
}

Depois:

int codigoF=Integer.parseInt(s[1]);
Fornecedor f = Dados.buscarFornecedorPorCodigo(codigo);
if (f != null) obj.setFornecedor(f);
else System.out.println("fornecedor nao existe");

Observe que não é possível atribuir o código do fornecedor, nem neste código que postei e nem no código que vc postou.

Cara valeu d++, tu simplificou oque eu precisava fazer de uma maneira perfeita :smiley:

deu certinho.

outra duvida, no tostring da minha classe Compra eu preciso mostrar apenas o código do fornecedor não o objeto inteiro, mas não consigo fazer isso usando getFornecedor().getCodigo();
o que deveria fazer ?

na classe Compra:

public int getCodigoDoFornecedor() {
    if (this.fornecedor != null) return this.fornecedor.getCodigo();
    else { System.out.println("fornecedor nao atribuido"); return -1; } // Se preferir, lance uma exceção 
}

mas se mesmo assim precisa cadastrar o código mesmo que o Fornecedor não exista:

public int getCodigoDoFornecedor() {
    return this.codigoDoFornecedor;
}

public void setCodigoDoFornecedor(c) {
    if (this.fornecedor != null && this.fornecedor.getCodigo() != c) {
        this.fornecedor = null;
    }
    this.codigoDoFornecedor = c;
}

public void setFornecedor(f) {
    this.fornecedor = f;
    this.codigoDoFornecedor = f.getCodigo();
}
1 curtida

funcionou perfeitamente !!
Obrigado demais pela ajuda <3