我有一个名为myFunction的函数,它将列表和函数作为输入,并将该函数应用于列表的每个元素。 示例:
list = {1,2,3}
def square(int x):
return x*x;
myFunction(list , square) should return {1 ,4, 9}
现在这里是catch,用户可以将任何函数作为输入。我知道这些函数可以包装在接口中并作为参数传递。但就我而言,我不会知道该函数的名称。有什么方法可以解决这个问题吗?
答案 0 :(得分:0)
如果使用Java 8,则可以使用函数(这假定函数返回与其输入参数相同的类型):
public <T> myFunction(T parameter, java.util.function.Function<T, T> funct){
return funct.apply(parameter);
}
或者,您可以使用函数接口并使用lambda表达式调用它,或者甚至按照其他人的建议调用匿名类:
interface IntDealer{
int apply(int param);
}
//Thus have your function defined like this:
public int myFunction(int param, IntDealer impl) {
return impl.apply(int);
}
通过这种方式,您可以使用lambda或匿名类来调用它。
答案 1 :(得分:0)
您可以在Java 8中使用Lambda表达式。
让我们说你的课程A
包含你的基本方法
class A{
int square(int i){
return i*i
}
// other methods (like square root) could here.
}
你可以创建一个类B
,它有一个接受另一个方法的方法和一个像这样的列表
class B {
public List<Integer> myFunction(List<Integer> list, IntConsumer aMethod) {
List<Integer> sqList=new ArrayList<>()
for (int i: list){
sqList.add(aMethod.accept(i))
}
return sqList;
}
}
最后,您可以这样称呼它:
new B().myFunction(list, A::suqare)
或
new B().myFunction(list, A::suqareRoot)
P.S:代码只是伪代码,您可能需要检查它是否编译。