我想将两个字符串数组传递给一个字符串varsargs。
即。
imshow
是合并两个数组的最佳方法,还是有更好的方法呢?
答案 0 :(得分:2)
在Java中非常不可能,因为没有传播运算符(例如在Kotlin,Ecmascript 6中)。您必须通过创建一个中间数组来解决此问题:
String arrayThree = new String[arrayOne.length + arrayTwo.length];
System.arraycopy(arrayOne, 0, arrayThree, 0, arrayOne.length);
System.arraycopy(arrayTwo, 0, arrayThree, arrayOne.length, arrayTwo.length);
doSomething(arrayThree);
或使用Stream
:
String arrayThree = Stream.concat(Arrays.stream(arrayOne), Arrays.stream(arrayTwo))
.toArray(String[]::new);
doSomething(arrayThree);
如上所述,这在kotlin中是可能的,并且可以这样完成:
val arrayOne: Array<String> = ...
val arrayTwo: Array<String> = ...
doSomething(*arrayOne, *arrayTwo)
甚至在javascript中:
const arrayOne = ...
const arrayTwo = ...
doSomething([...arrayOne, ...arrayTwo]);
答案 1 :(得分:1)
这是因为vararg必须是函数中的最后一个参数。这是Oracle文档的摘录:
https://docs.oracle.com/javase/8/docs/technotes/guides/language/varargs.html
最终参数类型之后的三个句点表明,最终参数可以作为数组或参数序列传递。可变参数只能在最后一个参数位置使用
String...
被String[]
取代,因此您不能在一个函数中传递两个数组,而该函数需要一个可变参数。
您将不得不将数组合并为一个。
答案 2 :(得分:0)
如果它们都属于同一类型,则只能在varargs中传递多个数组
public static void doSomething(String[] ...args){
}
public static void test(){
String[] arrayOne = {};
String[] arrayTwo = {};
doSomething(arrayOne, arrayTwo); //Doesn't work but just for an example
}
答案 3 :(得分:-2)
您可以使用以下指令合并两个数组:
import org.apache.commons.lang3;
// ...
String[] both = (String[])ArrayUtils.addAll(arrayOne , arrayTwo);
doSomething(both);
// ...
或者您可以传递两个数组。
public void doSomething(String[] pArrayOne, String[] pArrayTwo ){
}
public void test(){
String[] arrayOne = ...
String[] arrayTwo = ...
doSomething(arrayOne, arrayTwo);
}