让我们说我有动物对象和继承者。 其中一个是狗,只有他实施
public interface Barkable{
Bark getBark();
}
现在,我有
List<Animal> animals
其中包含所有动物类型,我想收集所有Bark实例 (仅存在于狗中) 我可以做Java 7风格
ArrayList<Bark> barks = new ArrayList<>();
for (Animal animal : AnimalsList) {
if (animal instanceof Barkable){
barks.add((Barkablle) dog).getBark();
}
}
如何在Java 8流中执行此操作? 它会和java-8版本一样快吗?
答案 0 :(得分:4)
您可以使用filter()
获取Barkable
个实例,然后使用map
获取Bark
s:
List<Bark> barks = AnimalsList.stream()
.filter (a -> a instanceof Barkable)
.map (a -> ((Barkable) a).getBark())
.collect (Collectors.toList());
至于运行时间,你必须自己测试。它取决于输入列表的大小,您可以使用parallelStream()
而不是stream()
来提高运行速度(如果您的输入足够大,以便并行流能够产生差异)。