通过函数转换Varags

时间:2018-04-02 10:45:04

标签: java variadic-functions

假设我在Java8中有两个可变函数:

select *, 
        sum([NoOfLeaves]) over (partition by EmpCode order by id) Leaves 
from SampleLeave
order by 1

和一个功能

public static Class3 func1(Class1... t){ ... }
public static Class3 func2(Class2... t){ ... }

将Class1的对象转换为Class2的对象。在func1中调用func2的最简单(并且希望是有效的)方法是什么,每个Class1对象通过transform-function转换为Class2的对象?

编辑:返回类型并不重要。我正在寻找类似于:

的成语
public static Class2 transform(Class1 source){ ... }

我知道我可以将它们视为数组并编写类似

的内容
public static Class3 func1(Class1... t){ 
    return func2( doTransformMagic(t) );
}

我问是否有任何内置习语可以更加轻松地做到这一点。

1 个答案:

答案 0 :(得分:2)

没有很好的简短方法可以做到这一点。特别是不可能利用func2是varargs方法的事实。您将不得不通过传递新阵列来呼叫func2

使用Java 8,你可以做到

public static void func1(Class1... t) {
    func2(Arrays.stream(t).map(SomeClass::transform).toArray(Class2[]::new));
}

使用Java 5的所有版本都可以

public static void func1(Class1... t) {
    Class2[] arr = new Class2[t.length];
    for (int i = 0; i < t.length; i++)
        arr[i] = transform(t[i]);
    func2(arr);
}