2013-03-04 105 views
7

如何使用带闭包的Java 8编写支持以 作为函数参数并返回函数值的方法?Lambda表达式和更高阶函数

+0

[爪哇草案规范的闭包(Neal Gafter和Peter von derAhé)](http://javac.info/) – 2013-03-04 10:13:06

+2

@ Quoi该网站涉及多年前去世的提案。有关Java 8实现的进展,请参阅http://lambdafaq.org – 2013-03-04 12:12:38

+0

@MauriceNaftalin谢谢 – 2013-03-04 15:38:04

回答

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中的闭包和lambdas基本上是语法糖,而且它们似乎并不具备函数式编程的所有功能。

+0

非常感谢您的答复!你知道是否适用这个:add(8)(10)因为这样做很无聊:add(8).apply(10) – xdevel2000 2013-03-04 13:15:24

+0

不幸的是,似乎是不允许的,至少 - 现在 – n1ckolas 2013-03-04 13:31:06

+0

n1ckolas,对不起,我没有找到任何撰写方法...我在哪里可以寻找一个例子来写一个带有更多参数的函数? – xdevel2000 2013-03-04 14:21:00