如何将两个数组传递给一个变量

时间:2019-04-17 09:03:41

标签: java

我想将两个字符串数组传递给一个字符串varsargs。

即。

imshow

是合并两个数组的最佳方法,还是有更好的方法呢?

4 个答案:

答案 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); 
}