Diciamo che hoPosso filtrare un flusso <T> in base alla classe dell'elemento e ottenere un flusso <U> in un solo passaggio?
class Dog extends Animal {}
class Cat extends Animal {}
e ho una lista di animali Utilizzando Guava FluentIterable posso filtrare e convertire in un unico passaggio
List<Cat> cats = FluentIterable.from(animals)
.filter(Cat.class)
.toList();
Utilizzando Java8 ho bisogno di fare
List<Cat> cats = animals.stream()
.filter(c -> c instanceof Cat)
.map(c -> (Cat) c)
.collect(Collectors.toList());
Non c'è modo che io possa fare la mappa del filtro & in un solo passaggio, giusto?
In C# è il '' metodo di estensione Enumerable.OfType, ma non so cosa sia in Java. –
il magico 'flatMap()' .... ma non farlo :) – ZhongYu
prova anche '.filter (Cat.class :: isInstance) .map (Cat.class :: cast)' - non c'è niente di meglio ovviamente. – ZhongYu