Qualcuno può dirmi se esiste un equivalente per le funzioni lambda di Python in Java?Equivalente per le funzioni lambda di Python in Java?
risposta
Un'idea si basa su un generico public interface Lambda<T>
- vedere http://www.javalobby.org/java/forums/t75427.html.
Non penso che esista un equivalente esatto, tuttavia ci sono classi anonime che sono il più vicino possibile. Ma ancora piuttosto diverso. Joel Spolsky ha scritto un articolo su come gli studenti hanno insegnato solo a Java che stanno perdendo queste bellezze della programmazione in stile funzionale: Can Your Programming Language Do This?.
Sfortunatamente, non ci sono lambda in Java. Tuttavia, è possibile ottenere quasi lo stesso effetto (in un modo davvero brutto) con le classi anonime:
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!");
}
});
}
}
Ovviamente questi avrebbe dovuto essere in file separati :(
Lambda può prendere e restituirà un valore . Vuoi qualcosa di più come Callable. – Dustin
Oltre ad essere in grado di accettare parametri e valori di ritorno, lambda può anche accedere alle variabili locali nell'ambito che sono state definite.In Java, le classi anonime possono accedere alle variabili finali nell'ambito in cui sono state definite, il che è abbastanza simile. OTOH, potrebbe essere una buona idea per Qualcosa per implementare Callable. – gooli
Un piccolo cavillo: 'MyLambda' non deve essere in un file diverso; potresti dichiararlo come un'interfaccia interna, pubblica, statica di 'Something'. –
Un po 'in modo simile a Zifre di, è potrebbe creare un'interfaccia così
public interface myLambda<In, Out> {
Out call(In i);
}
per consentire di scrivere, dire
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();
}
È ancora un po 'sfasato, sì, ma ha input/output almeno.
Penso che manchi una parentesi sulla linea 5 di quel secondo snippet di codice. Ho provato ad aggiungerlo da solo, ma StackOverflow non mi consente di apportare modifiche di solo 1 carattere in lunghezza. – falsePockets
Sì,
espressioni lambda sono introdotti in Java da java8.
sintassi di base per le espressioni lambda sono:
(parameters)->
{
statements;
}
Esempio
(String s)->
{
System.out.println(s);
}
controllare questo link:
http://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html
Con il rilascio di Java 8 , lambdacia- l'espressione è n disponibile E la funzione lambda in java è in realtà "più potente" di quella di python.
In Python, lambda-expression può avere una sola espressione per il suo corpo e nessuna istruzione return
è consentita. In Java, puoi fare qualcosa di simile a questo: (int a, int b) -> { return a * b; };
e altre cose facoltative.
Java 8 introduce anche un'altra interfaccia denominata Function Interface
. Potresti voler controllare anche questo.
- 1. Equivalente Python di LINQ Tutte le funzioni?
- 2. Come verranno compilate le funzioni lambda Java?
- 3. Equivalente Java di Python repr()?
- 4. Python, cPickle, funzioni lambda decapaggio
- 5. Java equivalente di mappatura funzione in Python
- 6. Equivalente TreeSet Java in Python?
- 7. Equivalente di Java a bisect in python
- 8. Python "Event" equivalente in Java?
- 9. Aggiunta di funzioni lambda con lo stesso operatore in python
- 10. Equivalente per LinkedHashMap in Python
- 11. Come ridefinire le funzioni in python?
- 12. Esiste un equivalente di override per le funzioni annidate?
- 13. Python: Java lancia equivalente in pitone
- 14. Perché C11 non supporta le funzioni lambda
- 15. VisualVM equivalente per Python
- 16. PHP equivalente a [&, epsilon] C++ "Catturare" le variabili in lambda?
- 17. Generazione di un elenco di funzioni in python
- 18. Equivalente LINQ/Lambda di SQL in
- 19. Come moltiplicare le funzioni in python?
- 20. di java() equivalente in pitone
- 21. Esiste un equivalente di itertools di Python per Java?
- 22. Equivalente Java del struct.pack di Python?
- 23. Espressioni lambda e funzioni di ordine superiore
- 24. Passport.js equivalente per Python?
- 25. Equivalente per inject() in Python?
- 26. Equivalente Java per il file str.strip di Python()
- 27. Come faccio a rendere generiche le funzioni lambda in Scala?
- 28. Java 8 lambda per Kotlin lambda
- 29. Java 8 lambda per trovare le medie dell'elenco di mappe
- 30. In che modo le funzioni dell'operatore sul posto di Python sono diverse dalle funzioni standard dell'operatore?
Per quello che vale, cinque anni dopo, Java 8 ha aggiunto espressioni lambda come funzionalità di lingua e una nuova API di Streams per gestire le operazioni di dati di massa. Non abbastanza comprensibili, ma comunque utili. –
Controlla questo: [Sono Java 8 Lambdas Closures?] (Http://bruceeckel.github.io/2015/10/17/are-java-8-lambdas-closures/) –