Java 8 个流 - 如何过滤列表并获取值
Java 8 streams - how to filter a list and get a value
假设我有 Animal 对象和后继对象。
其中之一是 Dog,只有他实现了
public interface Barkable{
Bark getBark();
}
现在,我有
List<Animal> animals
其中包含所有动物类型,我想收集 Bark 的所有实例
(仅存在于 Dog 中)。
我能行Java 7种风格
ArrayList<Bark> barks = new ArrayList<>();
for (Animal animal : AnimalsList) {
if (animal instanceof Barkable){
barks.add((Barkablle) dog).getBark();
}
}
如何在 Java 8 个流中进行?
它会和 java-8 版本一样快吗?
您可以使用 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()
来使其 运行 更快(如果您的输入对于并行流来说足够大有所作为)。
假设我有 Animal 对象和后继对象。 其中之一是 Dog,只有他实现了
public interface Barkable{
Bark getBark();
}
现在,我有
List<Animal> animals
其中包含所有动物类型,我想收集 Bark 的所有实例
(仅存在于 Dog 中)。
我能行Java 7种风格
ArrayList<Bark> barks = new ArrayList<>();
for (Animal animal : AnimalsList) {
if (animal instanceof Barkable){
barks.add((Barkablle) dog).getBark();
}
}
如何在 Java 8 个流中进行?
它会和 java-8 版本一样快吗?
您可以使用 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()
来使其 运行 更快(如果您的输入对于并行流来说足够大有所作为)。