This question already has answers here:
Is there a Java Stream method equivalent to Scala's collections “collect”?
(5个答案)
5年前关闭。
可以说我有
我有动物 list
使用Guava FluentIterable,我可以一步一步进行过滤和转换
使用Java8我需要做
我无法一步一步完成过滤器和 map ,对吗?
不幸的是,没有标准的方法可以一步完成,但是您可以使用第三方库。例如,在我的
(5个答案)
5年前关闭。
可以说我有
class Dog extends Animal {}
class Cat extends Animal {}
我有动物 list
使用Guava FluentIterable,我可以一步一步进行过滤和转换
List<Cat> cats = FluentIterable.from(animals)
.filter(Cat.class)
.toList();
使用Java8我需要做
List<Cat> cats = animals.stream()
.filter(c -> c instanceof Cat)
.map(c -> (Cat) c)
.collect(Collectors.toList());
我无法一步一步完成过滤器和 map ,对吗?
最佳答案
map
步骤在运行时是不必要的(它根本不执行任何操作),您只需要在编译过程中绕过类型检查即可。或者,您可以使用肮脏的未经检查的类型转换:
List<Cat> cats = ((Stream<Cat>) (Stream<?>) animals.stream().filter(
c -> c instanceof Cat)).collect(Collectors.toList());
不幸的是,没有标准的方法可以一步完成,但是您可以使用第三方库。例如,在我的
StreamEx
库中,有一个select
方法solves this problem:List<Cat> cats = StreamEx.of(animals).select(Cat.class).toList();
关于java - 我可以按元素的类过滤Stream <T>并一步获得Stream <U>吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31016222/
10-10 16:40