java - “轮流”组合两个数组的元素
问题描述
我想“轮流”组合两个数组的元素。
结果必须是:[a,1,b,2,c,3,d,4,e,5]
int[] mas1 = {1,2,3,4,5};
String[] mas2 ={"a","b","c","d","e"};
System.out.print("[");
for (int i = 0; i <mas1.length ; i++) {
System.out.print(mas2[i]+","+mas1[i]+",");
}
System.out.println("]");
它的工作。但是还有另一种聪明的方法来实现它吗?
解决方案
@Bambam 提出了一些非常好的解决方案,如果你想要的总是与 2 个相同大小的数组有关,我肯定会应用其中一个。
但是,如果您希望两个具有不同大小的数组并且独立于它们的类型,您可以使用类似于以下的解决方案:
public List<String> addRecursively(int index, Object[] array1, Object[] array2, List<String> list){
if(index < array1.length)
list.add(String.valueOf(array1[index]));
if(index < array2.length)
list.add(String.valueOf(array2[index]));
if(index >= array1.length && index >= array2.length)
return list;
return addRecursively(index+1, array1, array2, list);
}
以下是如何使用此方法的示例:
Integer[] arrayOfIntegers = new Integer[]{1,2,3,4,5};
String[] arrayOfStrings = new String[]{"a","b","c","d","e","f","g","h"};
List<String> unified = addRecursively(0,arrayOfStrings,arrayOfIntegers,new ArrayList<String>);
//output = a1b2c3d4e5f6g
for(String str:unified) System.out.print(str)
//output = [a, 1, b, 2, c, 3, d, 4, e, 5, f, 6, g]
System.out.println(Arrays.toString(list.toArray()));
请注意:您不能在此方法中使用原始类型。您的数组需要包装原始数据类型,这是通过装箱实现的。如果你的数组已经被实例化为原始类型,你可以像这样在 Java 8 中转换它们:
int [] primitive = //some value here;
Integer[] wrapped = IntStream.of(primitive).boxed().toArray(Integer[]::new);
你绝对可以使用这个答案中的 HashMap并在上述方法中实现它。
我希望每个人都觉得这个答案简单易懂。
推荐阅读
- java - 用户使用按钮向 tableview 输入数据
- spring - Spring Cloud Stream 3 RabbitMQ 消费者不工作
- html - 如何使用 .stroke1 类将点(SVG)居中
- java - 查找数组大小为 k 的窗口的最高频率的方法
- c# - 是否可以将 EF Core 配置为在保存时忽略子属性,使用外键创建关系,但在检索时仍填充子属性?
- reactjs - 当 React 应用程序在 Web 上运行时运行 express 服务器
- vba - 将多个字段发送到 Access VBA 中的新文件夹时出现无效的限定符编译错误
- flutter - Flutter 移动视觉中的过滤值
- javascript - 虽然有时它有效,但我在我的 React 项目中得到“.filter 不是函数”
- python - Numpy argsort - 发生了什么?