Java 8传递函数作为参数

时间:2015-05-22 21:41:14

标签: function java-8

我有这样的功能

int getSum(List<Dish>> list, Function function) { //function is not used yet 
     ...
     int sum = list.stream().mapToInt(Dish::getA1).sum();
     ... 
     return sum;
}

我想将一个函数传递给它,以便我可以在函数中执行此操作,其中函数可以是Dish :: getA1,Dish :: getA2等。

  int getSum(List<Dish>> list, Function function) { //function is used  
     ...
     int sum = list.stream().mapToInt(function).sum();
     ... 
     return sum;
}

我的问题是如何使这个功能?这不起作用:

Function func = Dish::getA1;

2 个答案:

答案 0 :(得分:2)

int getSum(List<Dish> list, ToIntFunction<Dish> function)

应该有效。

您必须了解Function是一种通用类型。因此,您需要Function个实例中的DishInteger(所以Function<Dish, Integer>),但由于您使用mapToInt,因此需要ToIntFunction }(函数Dish -> int)。

答案 1 :(得分:0)

如果您有一个将整数作为参数并返回字符串的函数,则函数中的参数将如下所示:

public void methodToCallFunctionFrom(Function<Integer, String> yourFunction) {

然后,当您在方法中调用函数时,它看起来像:

String s = yourFunction.apply(5);