2011-01-23 7 views
10

Recientemente me mudé de C# a Java [de nuevo]. Pero echo de menos las expresiones lambda y cosas como IEnumerable.Foreach of C#. Así que estoy buscando una biblioteca de expresiones lambda en Java.Expresiones de Lambda de .NET en Java

¿hay mejores bibliotecas que LambdaJ?

También es clojure directamente inlinable en los programas de Java? ¿Puedo mezclar el código de Clojure en las funciones de Java?

+0

Interesante ... C# no viene con 'IEnumerable.Foreach' – Gabe

+2

@Gabe - tienes razón sobre el punto pedante. Me refiero a los métodos de manejo de la colección que toman medidas. Lista .Foreach/Array.Foreach o Ienumerable . Todos etc. – Fakrudeen

Respuesta

13

Java 8 podría tener soporte lambda de forma nativa. Hasta entonces, puede usar una combinación de clases internas y bibliotecas anónimas como google-guava. A continuación se presentan otras bibliotecas que se puede mirar en

O mejor visión de Scala

+0

No entiendo una cosa, la expresión Lambda está patentada por Microsoft. ¿Cuál es la probabilidad de que Java pueda usarlo? – hardywang

+1

Me reí cuando lo leí, y luego encontré: http://www.google.com/patents/US20070044083 ... C# no está cerca del primer idioma para tener expresiones lambda. La patente debe ser una de esas tontas "No quiero que me demanden por hacer esto que todos han usado" patentes. – Dale

3

El bucle foreach equivalente en Java se estructura como esta

List<Foo> fooList = // some list containing foos 
for (Foo foo : fooList){ 
    // do stuff 
} 

No hay expresiones lambda en Java, por eso si usted puede esperar hasta Java8 están añadiendo cierres. Lo más cercano que puede obtener es anonymous inner classes.

+0

Gracias, pero no quise decir el equivalente de la palabra clave foreach de C#. Quise decir SomeCollection.ForEach (cierre). Más adelante, la parte de la respuesta es útil, aunque a. las clases internas son verbosas. – Fakrudeen

3

La biblioteca de Google guayaba contiene Function y Predicate clases que se pueden usar para emular la funcionalidad lambda. Como menciona kgrad arriba, puede crear instancias anónimas de cada uno.

http://guava-libraries.googlecode.com/svn/trunk/javadoc/com/google/common/base/Function.html
http://guava-libraries.googlecode.com/svn/trunk/javadoc/com/google/common/base/Predicate.html

Aunque se puede escribir fácilmente clases como éstas mismo, guayaba contiene una gran cantidad de métodos de ayuda que utilizan funciones y predicados para hacer las cosas como la transformación o el filtrado de todos los diferentes tipos de iterables: http://guava-libraries.googlecode.com/svn/trunk/javadoc/com/google/common/collect/Iterables.html

Nota: Me doy cuenta de que Pangea ya publicó un enlace a Google Guava anteriormente, pero ya había empezado a escribir esta publicación y pensé que aún sería útil proporcionar los enlaces.