将 Varargs 转换为函数

Transform Varags via Function

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

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

和一个函数

public static Class2 transform(Class1 source){ ... }

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

编辑:return 类型并不重要。我正在寻找类似于以下的成语:

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

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

的内容
public static Class3 func1(Class1... t){
    Class2[] target = new Class2[t.length];
    for (int i = 0; i < t.length; ++i){
        target[i] = transform(t[i]);
    }
    return func2(target);
}

我问的是是否有任何内置的习语可以更简洁地做到这一点。

没有很好的捷径来做到这一点。特别是不可能利用 func2 是可变参数方法这一事实。您将不得不通过传递一个新数组来调用 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);
}