Iteracions en Java 8
Una de les novetats del Java 8 és que ara permeten expressions Lambda. Amb les expressions Lambda s’afegeix una nova forma d’iterar amb Java.
Iteracions amb Enumeration des de Java 1:
Vector names =new Vector();
Enumeration e = names.elements();
while(e.hasMoreElements())
{
String name =(String) e.nextElement();
System.out.println(name);
}
Iteracions amb Iterator des de Java 1.2:
List names =new LinkedList();
Iterator i = names.iterator();
while(i.hasNext())
{
String name =(String) i.next();
System.out.println(name);
}
Iteracions amb generics des de Java 5:
List<String> names =new LinkedList<String>(); for(String name : names) { System.out.println(name); }
Iteracions amb forEach() i lambda expressions des de Java 8:
List<String> names =new LinkedList<>();
names.forEach(name ->System.out.println(name));
Pipelines amb stream() o parallelStream() des de Java 8: inclou filter(), distinct(), sorted(), map(), average(), sum(), max(), forEach()
List<String> names =new LinkedList<>();
long count = names.stream().filter(name -> name.startsWith("A")).count();
Els avantatges de treballar amb forEach() i pipelines són:
- El control del bucle el té la funció forEach() per tant es pot crear una funció forEach() pròpia que a cada iteració faci alguna cosa més que l’expressió lambda
- Els pipelines permeten un codi més net i declaratiu
- Els pipelines amb parallelStream() permeten una execució en paral·lel
- També es podria fer una cosa molt semblant als lambda expressions utilitzant inner classes i interfaces, però la diferència és que les expressions lambda no creen nous objectes java i per tant són molt més ràpides d’executar, ja que no han de crear i destruir objectes temporals.
Més informació a JavaWorld.com: Iterating over collecionts in Java 8