将命名函数作为参数传递

ewo*_*wok 5 java lambda java-8

Java 8添加了lambda表达式.以类似于匿名类的方式使用lambdas非常简单,但我想知道是否存在使用命名函数作为其他函数的参数的相关功能.例如,是否有Java方法来编写以下Python代码:

list1 = (1,2,3)
list2 = (4,5,6)

def add(a, b):
  return a+b

for e in map(add, list1, list2):
  print(e)
Run Code Online (Sandbox Code Playgroud)

产量

5
7
9
Run Code Online (Sandbox Code Playgroud)

Joh*_*ica 4

是的,您可以使用方法引用,例如Integer::sum允许使用 lambda 的地方。

int six = IntStream.of(1, 2, 3)
    .reduce(0, Integer::sum);
Run Code Online (Sandbox Code Playgroud)

这相当于

int six = IntStream.of(1, 2, 3)
    .reduce(0, (a, b) -> Integer.sum(a, b));
Run Code Online (Sandbox Code Playgroud)

Integer.sumJava 8 中添加了像和这样的方法Double.max,因此它们可以在像这样的 lambda 中使用。

不过,没有内置方法可以像 Python 那样将多个列表“压缩”在一起。

  • 使用[功能接口](http://www.lambdafaq.org/what-is-a-function-interface/):本质上是一个具有一种方法的接口。来自 [java.util.function](https://docs.oracle.com/javase/8/docs/api/java/util/function/package-summary.html) 的内容涵盖了大多数用例。 (2认同)
  • 是的,就像那样。您还可以简化最后一行:“map(Arrays.asList(1,2,3), Arrays.asList(4,5,6), (a, b) -> a + b)”。 (2认同)
  • `BiFunction<Integer, Integer, Integer> add = (a, b) -> a + b;` (2认同)