2016-03-18 13 views
6

Ecco il mio piano d'azione:Casting un elenco durante un'operazione di flusso

private List<Entity> getPlanets() { 
    return entities.values() 
        .stream() 
        .filter(x -> x instanceof Planet) 
        .collect(Collectors.toList()); 
} 
  • Entity è la super classe di Planet
  • entità è un HashMap<Entity>
  • Dato che il metodo si chiama "getPlanets" vorrei Mi piace come restituire un List<Planet> ma mi sembra che l'espressione del flusso sta per restituire un List<Entity>
  • Ho provato così Io lancio le espressioni ma nessuna sembra funzionare.

Sono nuovo di zecca con Java 8 stream quindi forse qualcuno può indicare cosa mi manca? Grazie!

risposta

8
return entities.values() 
       .stream() 
       .filter(x -> x instanceof Planet) 
       .map(x -> (Planet) x) 
       .collect(Collectors.toList()); 
+0

risposta più veloce da così mai! Grazie :) – pitosalas

+0

@pitosalas - puoi accettare questa risposta se risponde alla tua domanda. http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work – nhylated

2

Una variante con metodo riferimenti:

return entities.values().stream() 
    .filter(Planet.class::isInstance) 
    .map(Planet.class::cast) 
    .collect(Collectors.toList()); 
Problemi correlati