2013-03-04 9 views
7

Wie kann ich schreiben mit Java 8 mit Schließungen eine Methode, die als Argument eine Funktion und Rückgabefunktion als Wert nehmen?Lambda-Ausdrücke und Funktionen höherer Ordnung

+0

[Closures für Java Entwurfsspezifikation (von Neal Gafter und Peter von der Ahé)] (http://javac.info/) –

+2

@Quoi Diese Website bezieht sich auf Vorschläge, die vor Jahren gestorben sind. Für Fortschritte in Richtung Java 8 Implementierung siehe http://lambdafaq.org –

+0

@MauriceNaftalin dank –

Antwort

11

In Java Lambda API ist die Hauptklasse java.util.function.Function.

Sie können einen Verweis auf diese Schnittstelle in der gleichen Art und Weise verwenden, wie Sie mit allen anderen Artikeln tun würden: erstellen, die als Variable, kehren sie als Ergebnis der Berechnung und so weiter. Hier

ist ganz einfaches Beispiel, das Sie helfen könnten:

public class HigherOrder { 

     public static void main(String[] args) { 
      Function<Integer, Long> addOne = add(1L); 

      System.out.println(addOne.apply(1)); //prints 2 

      Arrays.asList("test", "new") 
        .parallelStream() // suggestion for execution strategy 
        .map(camelize)  // call for static reference 
        .forEach(System.out::println); 
     } 

     private static Function<Integer, Long> add(long l) { 
      return (Integer i) -> l + i; 
     } 

     private static Function<String, String> camelize = (str) -> str.substring(0, 1).toUpperCase() + str.substring(1); 
    } 

Wenn Sie mehr als 1 Parameter zu übergeben, nehmen bitte einen Blick in compose Methode, aber seine Verwendung ist ziemlich schwierig.

Im Allgemeinen von meiner Meinung Schließungen und Lambda-Ausdrücke in Java ist im Grunde Syntax-Zucker, und sie scheinen nicht alle Funktionen der funktionalen Programmierung haben.

+0

Ihnen sehr für die Antwort danken! Wissen Sie, ob es zutreffend dies: add (8) (10), weil dies tut sehr langweilig ist: add (8) .apply (10) – xdevel2000

+0

Leider scheint es nicht erlaubt zu sein, zumindest - jetzt – n1ckolas

+0

n1ckolas, entschuldigte Ich finde keine Compose-Methode ... Wo kann ich nach einem Beispiel suchen, um eine Funktion mit mehr Parametern zu schreiben? – xdevel2000

Verwandte Themen