java两个数组合并

Posted

tags:

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

String [] a="A","B","C","D","E";
String [] b="1","2","3","4","5","6","7","8";
最后想得到 A1 A2 A3..... B1 B2 B3 ...C1 .....一直到.E8 这种的一个数组
求救

分为两步:
1.连接两个数组.
2.清除重复的元素.

import java.util.Arrays;

public class Combine
public static void main(String[] args)
int a[]=1,2,3,4,5;
int b[]=4,5,6,7,8;

int temp[]=new int[a.length+b.length];

//连接两个数组
for(int i=0;i<a.length;i++)
temp[i]=a[i];

for(int i=0;i<b.length;i++)
temp[a.length+i]=b[i];


//连接数组完成,开始清除重复元素
int size=temp.length;
for(int i=0;i<temp.length;i++)
if(temp[i]!=-1)
for(int j=i+1;j<temp.length;j++)
if(temp[i]==temp[j])
temp[j]=-1;//将发生重复的元素赋值为-1
size--;





int[] result=new int[size];
for(int i=0,j=0;j<size && i<temp.length;i++,j++)
if(temp[i]==-1)
j--;

else
result[j]=temp[i];



//打印结果
System.err.println(Arrays.toString(result));

参考技术A public class Test3 
public static void main(String[] args) 
String[] a =  "A", "B", "C", "D", "E" ;
String[] b =  "1", "2", "3", "4", "5", "6", "7", "8" ;

for (int i = 0; i < a.length; i++) 
for (int j = 0; j < b.length; j++) 
System.out.print(a[i] + b[j]);






如何使用 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中如何把两个数组合并为一个

JAVA数组合并请高手指教

JAVA中的数组合并问题

2020-12-30 两个数组合并并去重对象

java中怎么合并两个数组 简单明了的

c两个数组合并去重