考虑这个类 -
Class Person {
private Integer age;
private Integer getAge() {
return this.age;
}
}
List<Person> list = new ArrayList<Person>
.. 大约 20 个实例
现在我必须找到所有成年人(年龄 >= 18) 我有两种方法可以用流来做到这一点 -
-
list.stream() .map(person -> person.getAge()) .filter(age -> age >= 18) .count()
-
list.stream() .filter(person -> person.getAge() >= 18) .count()
现在我的问题是:将采用方法 1,添加额外的迭代来执行任务,还是只是像方法 2 那样进行一次迭代?
最佳答案
一个流只能使用一次,因此不存在“额外的迭代”。还有一个额外的步骤,因此从技术上讲,第二个步骤更有效。然而,您必须拥有数百万个元素,即使这样,它也几乎不会被注意到。
在这种情况下,主要是选择您喜欢的风格。由于它们都易于阅读,因此第二个更有意义,因为它更简单。
关于java - Stream.map.filter的效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57754616/