Acerca de:

Este blog contiene los códigos, ejemplos y bases de datos que he usado cuando aprendía acerca de algún tema específico. En lugar de borrarlos (una vez dominado ya el tema), he decidido publicarlos :)

viernes, 6 de febrero de 2015

Comparación entre C# Linq y Java 8 streams

El siguiente código en C# declara un array de strings, filtra aquellos que tengan la cadens "am" y le añade tres puntos al final:


using System;
using System.Linq;

class Program
{
     static void Main()
    {
         string[] names = {"Sam","Pamela", "Dave", "Pascal", "Erik"};
         string[] filteredNames = names.Where(c => c.Contains("am")).Select(c => c + "...").ToArray();
         for (int i = 0; i < filteredNames.Length; i++)
               Console.WriteLine(filteredNames[i]);       
   }
}

El siguiente código en Java 8 hace exactamente lo mismo:

import static java.util.Arrays.stream;

public class HelloWorld
{
     public static void main(String []args)
     {
          String[] names = {"Sam","Pamela", "Dave", "Pascal", "Erik"};
          String[] filteredNames = stream(names).filter(c -> c.contains("am")).map(c-> c + "...").toArray(String[]::new);
          for (int i = 0; i < filteredNames.length; i++)
                  System.out.println(filteredNames[i]);
     }
}


El código en C# corre sobre Mono v3.10 y a partir del .Net Framework 3.5. El código en Java corre a partir del JDK 1.8.

En comparación con Linq, los streams en Java son un poquitillo más complicados de usar, especialmente por la cantidad de casteos que deben hacerse. La ventaja de Linq es que sus métodos como "Select" y "Where" recuerdan a los de SQL. La ventana de los streams de Java es que sus métodos como "map" y "filter" recuerdan a los de Python.