Ola Alex, na verdade não é uma dúvida, apenas queria colocar aqui mais uma teste que eu testei em caso de ocorrência de lance com os valores iguais. Por exemplo: Valor lance 1 = 500 Valor lance 2 = 500 Valor lance 3 = 500 Valor lance 4 = 100 Valor lance 5 = 200 Teriamos então três lances iguias e sendo assim, seria mostrado o três maiores lances com os mesmo valores, então por isso implementei o seguinte código.
//Classe de testes
private final Leilao CONSOLE = new Leilao("Console");
private final Lance FELIPE_LANCE_500 = new Lance(new Usuario("Felipe"), 500.0);
private final Lance FRAN_LANCE_310 = new Lance(new Usuario("Fran"), 310.0);
private final Lance RODRIGO_LANCE_250 = new Lance(new Usuario("Rodrigo"), 250.0);
private final Lance ROBERTA_LANCE_100 = new Lance(new Usuario("Roberta"), 100.0);
private final double DELTA = 0.0001;
@Test
public void deve_DevolverTresMaioresLances_QuandoRecebeMaisDeTresLancesComValoresIguail() {
CONSOLE.propoe(FELIPE_LANCE_500);
CONSOLE.propoe(FELIPE_LANCE_500);
CONSOLE.propoe(FELIPE_LANCE_500);
CONSOLE.propoe(FELIPE_LANCE_500);
CONSOLE.propoe(RODRIGO_LANCE_250);
CONSOLE.propoe(FRAN_LANCE_310);
CONSOLE.propoe(ROBERTA_LANCE_100);
List<Lance> tresMaioresLancesDevolvidos = CONSOLE.tresMaioresLances();
assertEquals(3, tresMaioresLancesDevolvidos.size());
assertEquals(500, tresMaioresLancesDevolvidos.get(0).getValor(), DELTA);
assertEquals(310, tresMaioresLancesDevolvidos.get(1).getValor(), DELTA);
assertEquals(250, tresMaioresLancesDevolvidos.get(2).getValor(), DELTA);
}
//Classe Leilao
public class Leilao implements Serializable {
//Demais métodos e atributos
public List<Lance> tresMaioresLances() {
int quantidadeMaximaLances = lances.size();
if (quantidadeMaximaLances > 3) {
return getTresMaioresLances();
}
return lances.subList(0, quantidadeMaximaLances);
}
private List<Lance> getTresMaioresLances() {
List<Lance> tresMaioresLances = new ArrayList<>();
tresMaioresLances.add(lances.get(0));
int counter = 1;
while (tresMaioresLances.size() < 3) {
Lance lance = lances.get(counter);
if (!tresMaioresLances.contains(lance)) tresMaioresLances.add(lance);
counter++;
if (counter == quantidadeMaximaLances) break;
}
return tresMaioresLances;
}
}