将 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);
}
假设我在 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);
}