¿Puede alguien decirme si hay un equivalente para las funciones lambda de Python en Java?¿Equivalente para las funciones lambda de Python en Java?
Respuesta
Una idea se basa en un genérico public interface Lambda<T>
- ver http://www.javalobby.org/java/forums/t75427.html.
No creo que haya un equivalente exacto, sin embargo, hay clases anónimas que están lo más cerca posible. Pero aún es bastante diferente. Joel Spolsky escribió un artículo sobre cómo los estudiantes enseñaron que solo Java se está perdiendo de estas bellezas de la programación de estilo funcional: Can Your Programming Language Do This?.
Desafortunadamente, no hay lambdas en Java. Sin embargo, puede obtener casi el mismo efecto (de una manera muy fea) con las clases anónimas:
interface MyLambda {
void theFunc(); // here we define the interface for the function
}
public class Something {
static void execute(MyLambda l) {
l.theFunc(); // this class just wants to use the lambda for something
}
}
public class Test {
static void main(String[] args) {
Something.execute(new MyLambda() { // here we create an anonymous class
void theFunc() { // implementing MyLambda
System.out.println("Hello world!");
}
});
}
}
Obviamente, estas tendrían que ser en archivos separados :(
Lambda puede tomar y devolverá un valor . Quieres algo más parecido a Callable. – Dustin
Además de poder aceptar parámetros y valores devueltos, las lambdas también pueden acceder a variables locales en el ámbito que se definieron.En Java, las clases anónimas pueden acceder a variables finales en el ámbito en el que se definieron, lo cual es lo suficientemente similar. OTOH, podría ser una buena idea que algo implemente Callable. – gooli
Una pequeña objeción: 'MyLambda' no tiene que estar en un archivo diferente; podría declararlo como una interfaz interna, pública y estática de 'Something'. –
un tanto como la Zifre de, usted podría crear una interfaz de este modo
public interface myLambda<In, Out> {
Out call(In i);
}
para que pueda escribir, dicen
Function<MyObj, Boolean> func = new Function<MyObj, Boolean>() {
public Boolean callFor(myObj obj) {
return obj.canDoStuff();
};
MyObj thing = getThing;
if (func.callFor(thing)) {
doSomeStuff();
} else {
doOtherStuff();
}
Todavía es un poco kludgy, sí, pero tiene entrada/salida al menos.
Creo que te falta un paréntesis en la línea 5 de ese segundo fragmento de código. Traté de agregarlo yo mismo, pero Stackoverflow no me permite hacer modificaciones de solo 1 carácter de longitud. – falsePockets
Sí,
expresiones lambda se introducen en Java desde java8.
sintaxis básica de las expresiones lambda son:
(parameters)->
{
statements;
}
Ejemplo
(String s)->
{
System.out.println(s);
}
Comprobar este enlace:
http://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html
Con el lanzamiento de Java , lambda- la expresión es n ow disponible. Y la función lambda en java es en realidad "más poderosa" que las de pitón.
En Python, lambda-expression solo puede tener una expresión única para su cuerpo, y no se permite ninguna declaración return
. En Java, puede hacer algo como esto: (int a, int b) -> { return a * b; };
y otras cosas opcionales también.
Java 8 también presenta otra interfaz llamada Function Interface
. Es posible que desee verificar eso también.
- 1. Java equivalente de correlación de funciones en Python
- 2. varargs en funciones lambda en Python
- 3. Uso de las funciones lambda _ en Scala
- 4. Clojure equivalente a las funciones "any" y "all" de Python?
- 5. Funciones generadoras de rizo interior con expresión lambda en Python
- 6. Java equivalente para str.strip de Python()
- 7. funciones lambda en bash
- 8. Java Mahout equivalente en Python
- 9. Equivalente para LinkedHashMap en Python
- 10. Python "Evento" equivalente en Java?
- 11. ¿Guardias Haskell en funciones lambda?
- 12. ¿Cómo redefino las funciones en python?
- 13. python: alternativa a las funciones anónimas
- 14. ¿El equivalente TreeSet de Java en Python?
- 15. ¿Existe un equivalente de anulación para las funciones anidadas?
- 16. lambda devuelve lambda en python
- 17. Python "dir" equivalente en Clojure
- 18. equivalente en Java de struct.pack de Python?
- 19. equivalente de Java a bisección en python
- 20. 'equivalente de amigos' para Java?
- 21. Python Lambda Problems
- 22. Alcance de las funciones lambda y sus parámetros?
- 23. LINQ/Lambda equivalente de SQL en
- 24. Expresiones de Lambda de .NET en Java
- 25. Generación de una lista de funciones en Python
- 26. Java Equivalente a los diccionarios de Python
- 27. ¿Hay un equivalente de itertools de Python para Java?
- 28. Equivalente para inyectar() en Python?
- 29. ¿Cómo acceder al objeto primario desde las funciones lambda?
- 30. Función lambda para clases en python?
Por lo que vale, cinco años después, Java 8 ha agregado expresiones lambda como una característica de idioma y una nueva API de Streams para manejar operaciones de datos masivos. No es del todo comprensivo, pero sigue siendo útil. –
Mira esto: [¿Son Java 8 Lambdas Closures?] (Http://bruceeckel.github.io/2015/10/17/are-java-8-lambdas-closures/) –