El Noguer

Joaquim Perez i Noguer

Iteracions en Java 8

Filed under: Ciència i tecnologia — Joaquim Perez Noguer at 4:46 pm on Dimecres, agost 13, 2014

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



No Comments »

No comments yet.

RSS feed for comments on this post. TrackBack URI

Leave a comment

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>