Java中如何把两个数组合并为一个

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中如何把两个数组合并为一个相关的知识,希望对你有一定的参考价值。

import java.util.Arrays;

//Java中如何把两个数组合并为一个
public class gog
public static void main(String[] args)
String [] str1 = "J","a","v","a","中";
String [] str2 = "如","何","把","两","个","数","组","合","并","为","一","个";

int strLen1=str1.length;//保存第一个数组长度
int strLen2=str2.length;//保存第二个数组长度
str1= Arrays.copyOf(str1,strLen1+ strLen2);//扩容
System.arraycopy(str2, 0, str1, strLen1,strLen2 );//将第二个数组与第一个数组合并
System.out.println(Arrays.toString(str1));//输出数组


参考技术A int[] s =4, 7, 2, 3, 1 ,10, 6, 5 ,9 ,8;
int[] s2 = 4,6,2,10,24,9,30,7;
int a[]=new int[s.length+s2.length]; //定义一个长度为s加s2长度的数组
System.arraycopy(s,0,a,0,s.length); //将数组s的元素复制到a中
System.arraycopy(s2,0,a,s.length,s2.length); //将数组s2的元素复制到a中
for(int i=0;i<a.length;i++) //输出新的数组元素a
System.out.println(a[i]);
参考技术B java数组合并问题

三种字符数组合并的方法

public static String[] getOneArray()
String[] a = "0", "1", "2" ;
String[] b = "0", "1", "2" ;

String[] c = new String[a.length + b.length];

for (int j = 0; j < a.length; ++j)
c[j] = a[j];


for (int j = 0; j < b.length; ++j)
c[a.length + j] = b[j];


return c;


public static Object[] getTwoArray()
String[] a = "0", "1", "2" ;
String[] b = "0", "1", "2" ;

List aL = Arrays.asList(a);
List bL = Arrays.asList(b);

List resultList = new ArrayList();
resultList.addAll(aL);
resultList.addAll(bL);

Object[] result = resultList.toArray();
return result;


public static String[] getThreeArray()
String[] a = "0", "1", "2", "3" ;
String[] b = "4", "5", "6", "7", "8" ;
String[] c = new String[a.length + b.length];
System.arraycopy(a, 0, c, 0, a.length);
System.arraycopy(b, 0, c, a.length, b.length);
return c;


1.两个字符数组合并的问题

public String[] getMergeArray(String[] al,String[] bl)
String[] a = al;
String[] b = bl;
String[] c = new String[a.length + b.length];
System.arraycopy(a, 0, c, 0, a.length);
System.arraycopy(b, 0, c, a.length, b.length);
return c;


2.字符数组和整形数组合并问题

public int[] getIntArray(int[] al,String[] bl)
int[] a = al;
String[] b = bl;

int[] ia=new int[b.length];
for(int i=0;i<b.length;i++)
ia[i]=Integer.parseInt(b[i]);


int[] c = new int[a.length + ia.length];
System.arraycopy(a, 0, c, 0, a.length);
System.arraycopy(ia, 0, c, a.length, ia.length);
return c;
参考技术C package 数组与数组合并;
import java.util.Arrays;

//Java中如何把两个数组合并为一个
public class gog
public static void main(String[] args)
String [] str1 = "J","a","v","a","中";
String [] str2 = "如","何","把","两","个","数","组","合","并","为","一","个";

int strLen1=str1.length;//保存第一个数组长度
int strLen2=str2.length;//保存第二个数组长度
str1= Arrays.copyOf(str1,strLen1+ strLen2);//扩容
System.arraycopy(str2, 0, str1, strLen1,strLen2 );//将第二个数组与第一个数组合并
System.out.println(Arrays.toString(str1));//输出数组


参考技术D  static Object[] merge(Object[] a1, Object[] a2) 
  Object[] a3 = new Object[a1.length + a2.length];
  System.arraycopy(a1, 0, a3, 0, a1.length);
  System.arraycopy(a2, 0, a3, a1.length, a2.length);
  return a3;
 

如何使用 Java 流将两个数组合并到一个映射中?

【中文标题】如何使用 Java 流将两个数组合并到一个映射中?【英文标题】:How to merge two arrays into a map using Java streams? 【发布时间】:2018-04-07 11:29:19 【问题描述】:

假设我们得到了以下两个数组

String[] keys   = new String[] "a", "b", "c", "aa", "d", "b"
int[]    values = new int[]     1 ,  2 ,  3 ,  4  ,  5 ,  6 

通过将这 2 个数组合并到 HashTable 中,我们得到以下内容

// pseudo-code
Map<String, Integer> dictionary = new HashTable<>(
  ("a"  => 1)
  ("b"  => 8) // because "b" appeared in index 1 and 5
  ("c"  => 3)
  ("aa" => 4)
  ("d"  => 5)
);

我们如何使用 java Lambda 风格做到这一点?

到目前为止,我有以下内容:

// this loops through the range given (used for index start and end)
// and sums the values of duplicated keys
tree.listMap = IntStream.range(range[0], range[1]).boxed().collect(
  Collectors.toMap(i - > dictionary[i], i - > i + 1, Integer::sum, TreeMap::new)
);

但是,我想取 2 个数组,按键和值合并它们,其中值是重复键的所有值的总和。我们该怎么做?

【问题讨论】:

【参考方案1】:

我不喜欢在引用索引时使用流,但您可以使用 groupingBysummingInt 来完成此操作:

Map<String, Integer> result = IntStream.range(0, keys.length)
   .boxed()
   .collect(
       Collectors.groupingBy(
           i -> keys[i],
           Collectors.summingInt(i -> values[i])
       )
   );

请注意,这是在键和值长度相等的假设下工作的,因此您可能需要进行一些额外的验证。

【讨论】:

我没有过多关注已排序的地图。要求只是将具有给定值的两个数组合并为重复键的总和。我的问题是不是太含糊了?让我知道,我会编辑。不管迈克尔,我很感激你的回答。学习新东西非常温暖:) @Jamie Nope,您的问题非常清楚。乐于助人。【参考方案2】:

你去吧:

Map<String,Integer> themap = 
       IntStream.range (0, keys.length).boxed()
                .collect (Collectors.toMap(i->keys[i],
                                           i->values[i],
                                           Integer::sum,
                                           TreeMap::new));

输出:

a=1, aa=4, b=8, c=3, d=5

这与您发布的 sn-p 非常相似,但由于某种原因,您发布的 sn-p 不包含对 keysvalues 数组的引用。

【讨论】:

this和this的输出略有不同。只是想知道,groupingBy 是否也对数据进行排序? @nullpointer Map 不保证迭代顺序,因此输出的所有意图和目的都相同。 @nullpointer 我的答案返回一个TreeMap (如在 OPs 代码中),因此对键进行了排序。您还可以修改groupingBy 解决方案以返回TreeMap(默认情况下,当前实现返回HashMap)。 感谢 Eran 的回答。我有点纠结于如何合并 2 个单独的数组。因此,为什么您看不到任何键和值的引用。在您的解决方案之前,我只获得了一个数组。

以上是关于Java中如何把两个数组合并为一个的主要内容,如果未能解决你的问题,请参考以下文章

JAVA怎么合并两个数组

如何将两个有序数组合并为一个有序数组,用函数做,一个循环搞定?

将 plist 文件中的两个数组合并为一个

如何将两个数组合并为一个相应的2d数组?

Python版将两个有序数组合并为一个有序数组

C++中怎样把两个升序数组合并