Lorsque j'itère une collection en utilisant le nouveau sucre syntaxique de Java 8, tel que
myStream.forEach(item -> {
// do something useful
});
N'est-ce pas équivalent à l'extrait de code «ancienne syntaxe» ci-dessous?
myStream.forEach(new Consumer<Item>() {
@Override
public void accept(Item item) {
// do something useful
}
});
Cela signifie-t-il qu'un nouvel Consumer
objet anonyme est créé sur le tas chaque fois que j'itère sur une collection? Combien d'espace de tas cela prend-il? Quelles implications en termes de performances cela a-t-il? Cela signifie-t-il que je devrais plutôt utiliser l'ancien style pour les boucles lors de l'itération sur de grandes structures de données à plusieurs niveaux?