Sistema de leilão

Olá, Comunidade?!

Estou tentando criar um método chamado “close” á classe Leilao. Ele deve iterar pela coleção de lotes e imprimir detalhes de todos os lotes.
Estou usando o loop for-each. Qualquer lote que recebeu pelo menos um lance é considerado como vendido. Para lotes que foram vendidos,
os detalhes devem incluir o nome do arrematador vencedor e o valor do lance ganhador. Para lotes que não foram vendidos, imprima uma
mensagem que indique esses fato.

A classe Leilão

import java.util.ArrayList;

public class Leilao
{
    private ArrayList<Lote> lotes;
    private int proximoNumeroDeLote;
    
    public Leilao()
    {
        lotes = new ArrayList<Lote>();
        proximoNumeroDeLote = 1;
    }
    
    public void insiraLote(String descricao)
    {
        lotes.add(new Lote(proximoNumeroDeLote, descricao));
        proximoNumeroDeLote++;
    }
    
    public void mostraLotes()
    {
        for(Lote lote : lotes)
        {
            System.out.println(lote.toString());
        }
    }
    
    public void verificaLance(int numeroDoLote, Pessoa licitante, long valor)
    {
        Lote selecionaLote = getLote(numeroDoLote);
        if(selecionaLote != null) 
        {
            boolean sucesso = selecionaLote.verificaLance(new Lance(licitante, valor));
            if(sucesso) 
            {
                System.out.println("A proposta para o lote número " + numeroDoLote + " foi bem sucedida.");
            }
            else 
            {
                // Report which bid is higher.
                Lance maiorLance = selecionaLote.getMaiorLance();
                System.out.println("Número do lote: " + numeroDoLote + " já tem um lance de: " +  maiorLance.getValor());
            }
        }
        
    }
    
    public Lote getLote(int numeroDoLote)
    {
        if((numeroDoLote >= 1) && (numeroDoLote < proximoNumeroDeLote)) 
        {
            // The number seems to be reasonable.
            Lote selecionaLote = lotes.get(numeroDoLote - 1);
            // Include a confidence check to be sure we have the
            // right lot.
            if(selecionaLote.getNumero() != numeroDoLote) 
            {
                System.out.println("Erro interno: Lote número " + selecionaLote.getNumero() + " foi devolvido ao invés de " + numeroDoLote);
                // Don't return an invalid lot.
                selecionaLote = null;
            }
            return selecionaLote;
        }
        else 
        {
            System.out.println("Numero do lote: " + numeroDoLote + " não existe.");
            return null;
        }
    }   

   /**
     * Dúvida
     * aqui quero imprimir os detalhes
     * como nome do arrematador,
     * vencedor do lance e o valor.
     *
     * Como faço para imprimir o nome do arrematador???
     */
    public void close()
    {
        for(Lot lote :  lots)
        {
            System.out.println("Lote.: " + lote + "Arrematador.: " );
        }
    }
    
    
}

A classe Lote

public class Lote
{
    private final int numero;
    private String descricao;
    private Lance maiorLance;
    
    public Lote(int numero, String descricao)
    {
        this.numero = numero;
        this.descricao = descricao;
    }
    
    public boolean verificaLance(Lance lance)
    {
        if((maiorLance == null) || (lance.getValor() > maiorLance.getValor()))
        {
            // Este é o melhor lance até agora.
            maiorLance = lance;
            return true;
        }
        else
        {
            return false;
        }
    }
    
    public String toString()
    {
        String detalhes = numero + ": " + descricao;
        if(maiorLance != null) 
        {
            detalhes += "    Lance: " + maiorLance.getValor();
        }
        else 
        {
            detalhes += "    (Nenhum lance)";
        }
        return detalhes;
    }
    
    public int getNumero()
    {
        return numero;
    }
    
    public String getDescricao()
    {
        return descricao;
    }
    
    public Lance getMaiorLance()
    {
        return maiorLance;
    }
}

A classe Pessoa

public class Pessoa
{
   private final String nome;
   
   public Pessoa(String nome)
   {
       this.nome = nome;
   }
   
   public String getNome()
   {
       return nome;
    }
}

E a classe Lance

public class Lance
{
    private final Pessoa licitante;
    private final long valor;
    
    public Lance(Pessoa licitante, long valor)
    {
        this.licitante = licitante;
        this.valor = valor;
    }
    
    public Pessoa getLicitante()
    {
        return licitante;
    }
    
    public long getValor()
    {
        return valor;
    }
}

Como imprimir o nome do arrematador na classe Leilão no método close???

Tenta isso:

Crie um método na classe Lance que retorne a Pessoa:

    public Pessoa getPessoa(){
    	return licitante;
    }

Após isso para cada Leilao/Lance busque a pessoa vencedora:

Leilao novoLeilao = new Leilao();

Lance lance = new Lance(new Pessoa("peresjuliao"), 100L);

novoLeilao.getLances().getPessoa().getNome();

Dá pra seguir essa idéia.

Abraços.

Fabio Nascimento