Diamo un'occhiata a questo esempio:Perché iterator.forEachRemaining non rimuove l'elemento nel lambda Consumer?
public class ListIteratorTest {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("element1");
list.add("element2");
list.add("element3");
list.add("element4");
ListIterator<String> iterator = list.listIterator();
}
}
E ora, questo funziona bene:
// prints elements out, and then appropriately removes one after another
while (iterator.hasNext()){
System.out.println(iterator.next());
iterator.remove();
}
mentre questo genera un IllegalStateException:
// throws IllegalStateException, why?
iterator.forEachRemaining(n -> {
System.out.println(n);
iterator.remove();
});
La mia domanda è breve: perché ?
Le espressioni lambda (e ovviamente anche i riferimenti ai metodi) hanno il grande vantaggio di creare codice molto più leggibile o pulito. Io tendo ad usarli ovunque io ottenga un vantaggio reale - in termini di leggibilità - da loro. Il tuo esempio lambda non è più leggibile o meno leggibile, quindi l'esempio che non usa un'espressione lambda. In effetti, ha lo stesso numero di linee di codice. Allora, perché senti, che devi (o dovresti) usare lambda qui? Infatti ... l'hai rilevato ... rendono il tuo codice un po 'complicato, perché non dovresti usare l'iteratore all'interno del lambda. – Seelenvirtuose
@Seelenvirtuose Sono ancora in corso con le capacità di apprendimento di Java8, quindi cerco di utilizzare lambdas, ecc. Ovunque io possa. Ho solo pensato che fosse possibile e volevo controllarlo - aveva dato risultati inattesi e non sapevo perché lo chiedessi qui; ma grazie per la spiegazione di cosa sono realmente fatti i lambas - per semplicità ove possibile – azalut