Acabei tentando fazer um cast para ArrayList, pois o método retorna uma list, mas dá erro na hora de executar o teste
package br.com.caelum.leilao.servico;
import java.awt.List;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import br.com.caelum.leilao.dominio.Lance;
import br.com.caelum.leilao.dominio.Leilao;
public class Avaliador {
private double maiorDeTodos = Double.NEGATIVE_INFINITY;
private double menorDeTodos = Double.POSITIVE_INFINITY;
private ArrayList<Lance> maiores;
public void avalia(Leilao leilao){
for(Lance lance : leilao.getLances()){
if(lance.getValor() > maiorDeTodos) maiorDeTodos = lance.getValor();
if(lance.getValor() < menorDeTodos) menorDeTodos = lance.getValor();
}
maiores = new ArrayList<Lance>(leilao.getLances());
Collections.sort(maiores, new Comparator<Lance>(){
public int compare(Lance o1, Lance o2) {
if(o1.getValor() < o2.getValor()) return 1;
if(o1.getValor() > o2.getValor()) return -1;
return 0;
}
});
maiores = (ArrayList<Lance>) maiores.subList(0, maiores.size() > 3 ? 3 : maiores.size());
}
public ArrayList<Lance> getTresMaiores(){
return maiores;
}
public double getMaiorLance() {
return maiorDeTodos;
}
public double getMenorLance() {
return menorDeTodos;
}
}
O erro é esse:
java.lang.ClassCastException: java.util.ArrayList$SubList cannot be cast to java.util.ArrayList
at br.com.caelum.leilao.servico.Avaliador.avalia(Avaliador.java:34)
at br.com.caelum.leilao.teste.TesteDoAvaliador.deveEncontrarOsTresMaioresLances(TesteDoAvaliador.java:64)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:678)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)