【发布时间】:2017-01-17 16:42:05
【问题描述】:
我做了这个方法:
public void update(){
for(GameObject object : objects)
object.update();
}
然后我的 IDE 可以用于每个,而不是任何,我认为我所做的,任何我让它替换它。这就是它给我的东西:
public void update(){
objects.forEach(GameObject::update);
}
乍一看,这似乎更好,然后我的 IDE 说您可以将其转换为 lambda 表达式,即:
public void update(IUpdater updater){
objects.forEach((object) -> object.update());
}
这给人的印象是GameObject:: update 是一些 lambda 表达式,记住我所知道的 java 8 的唯一新东西 (object) -> object.update() 替换了匿名类,猜测它仍然在某个地方。
这个本质'objects.forEach(GameObject::update)'是否意味着:
public void update(){
objects.forEach(new Consumer<GameObject>() {
@Override
public void accept(GameObject object) {
object.update();
}
});
}
如果是这样,那么我的原始方法会比GameObject::update 更有效。已将其方法保留为GameObject::update,但如果找到原始方法更有效,将其改回。
我纯粹是根据表现提出这个问题。
【问题讨论】:
-
GameObject::update是method reference -
性能差异可以忽略不计。
-
“我问的是纯粹基于性能的问题。”在证明您实际上确实存在性能问题之前,您永远不应该在这样的级别上进行微优化。 Premature optimization is the devil.
-
不要仅仅因为 IDE 说你可以做某事,它就会自动变得更好。通常,如果您有一个 lambda 表达式,他们会说,您可以将其转换为方法引用,而当您有方法引用时,他们会说,您可以将其转换为一个 lambda 表达式,在这两种情况下,他们都说您可以将其转换为匿名类,反之亦然……
标签: java collections foreach lambda java-8