2013-03-04 29 views
7

W jaki sposób mogę napisać z Java 8 z zamknięciami obsługuje metodę, która przyjmuje jako argument funkcji i funkcji powrotu jako wartość?Wyrażenia lambda i funkcje wyższego rzędu

+0

[Zamknięcia specyfikacji projektu Java (autor: Neal Gafter i Peter von der Ahé)] (http://javac.info/) –

+2

@Quoi Ta strona internetowa odnosi się do propozycji, które umarły lata temu. Postęp w kierunku wdrożenia Java 8 patrz http://lambdafaq.org –

+0

@MauriceNaftalin dzięki –

Odpowiedz

11

W języku Java Lambda API główną klasą jest java.util.function.Function.

Możesz użyć odniesienia do tego interfejsu w taki sam sposób, jak zrobiłbyś z wszystkimi innymi odniesieniami: utwórz je jako zmienne, zwróć je w wyniku obliczeń i tak dalej.

Oto dość prosty przykład, który może pomóc:

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); 
    } 

Jeśli trzeba przejść więcej niż 1 parametr, proszę spojrzeć do compose metody, ale jej użycie jest dość trudne.

Zasadniczo z mojej opinii zamknięcia i lambdy w Javie są w zasadzie cukrem składniowym i wydają się nie mieć wszystkich możliwości programowania funkcjonalnego.

+0

dziękuję bardzo za odpowiedź! Czy wiesz, czy to ma zastosowanie: dodaj (8) (10), ponieważ to jest bardzo nudne: dodaj (8) .apply (10) – xdevel2000

+0

Niestety wydaje się, że nie jest dozwolone, przynajmniej - teraz – n1ckolas

+0

n1ckolas, przepraszam , Nie znajduję żadnej metody komponowania ... gdzie mogę szukać przykładu napisania funkcji o większej liczbie parametrów? – xdevel2000