将函数列表转换为可以传递给varargs方法的参数

时间:2018-09-04 12:40:26

标签: java java-8

  public Email myMethod(Function<MyObject, String>... functions) { ...  }

我创建了一个函数列表,我想传递给myMethod:

     List<Function<MyObject, String>>  functions= new ArrayList<>();
        if (condition1) {
            functions.add(myObject->myObject.getStringX());
        } else {
            functions.add(myObject->myObject.getStringY());
        }
        myMethod(functions);//Does not compile, I must find a solution here 
        to convert my list of functions to an array that can be accepted as 
        myMethod argument

2 个答案:

答案 0 :(得分:1)

这是array个函数,因此请创建一个此类函数的数组并将其传递。

或者您可以通过以下方式调用它:

Function<MyObject, String>[] array = new Function[functions.size()];
functions.toArray(array);
myMethod(array);

请注意,您不能创建一个通用数组,但可以这样声明一个。

答案 1 :(得分:1)

我认为应该是更干净的代码

Function [] functionsArray = new Function[functions.size()];
for (int i=0;i< functions.size();i++) {
    functionsArray[i] = functions.get(i);
}
myMethod(functionsArray); // unchecked assignment here ofcourse

然后我的IDE建议我写为

myMethod(functions.toArray(new Function[0]));