2013-03-04 2 views
7

Как я могу написать с помощью Java 8 с закрытием, поддерживает метод, который принимает как аргумент функции и возвращает функцию как значение?Лямбда-выражения и функции более высокого порядка

+0

[Закрытие для спецификации проекта Java (Нил Гафтер и Питер фон-ам-Ахе)] (http://javac.info/) –

+2

@Quoi Этот сайт относится к предложениям, которые умерли много лет назад. Для продвижения к реализации Java 8 см. Http://lambdafaq.org –

+0

@MauriceNaftalin спасибо –

ответ

11

В Java Lambda API основным классом является java.util.function.Function.

Вы можете использовать ссылку на этот интерфейс так же, как и со всеми другими ссылками: создать это как переменную, вернуть ее в результате вычислений и т. Д.

Вот довольно простой пример, который может помочь вам:

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

Если вам нужно передать более 1 параметр, пожалуйста, посмотрите в compose метод, но его использование довольно сложно.

В целом, по моему мнению, закрытие и лямбда в Java - это в основном синтаксис-сахар, и у них, похоже, нет всех возможностей функционального программирования.

+0

большое спасибо за ответ! Знаете ли вы, применимо ли это: добавьте (8) (10), потому что это очень скучно: add (8) .apply (10) – xdevel2000

+0

К сожалению, кажется, что это запрещено, по крайней мере - сейчас – n1ckolas

+0

n1ckolas, извините меня , Я не нахожу какой-либо метод компоновки ... где я могу найти пример для записи функции с большим количеством параметров? – xdevel2000

Смежные вопросы