我有几个字符串数组列表。我想根据每个数组的第一个元素将这些列表合并到一个列表中。如何合并几个基于第一个元素的数组列表?
基本上,我想在这一个
[key4,a,a,a,null,null]
[key3,null,null,null,c,c]
[key2,a,a,a,b,b]
[key1,a,a,a,b,b]
一些更多的东西合并这两个列表
ArrayList<String[]> list1 = new ArrayList<String[]>();
list1.add(new String[]{"key1","a","a","a"});
list1.add(new String[]{"key2","a","a","a"});
list1.add(new String[]{"key4","a","a","a"});
ArrayList<String[]> list2 = new ArrayList<String[]>();
list2.add(new String[]{"key1","b","b"});
list2.add(new String[]{"key2","b","b"});
list2.add(new String[]{"key3","c","c"});
:
- 列表顺序并不重要
- 阵列订单是重要,所以我必须添加填充如果值不存在
有人知道有效的方法来做到这一点吗?
我目前的做法
我目前的做法使用一个HashMap来存储密钥(数组的第一个元素)
HashMap<String, String[]> results = new HashMap<String, String[]>();
process(list1);
process(list2);
void process(ArrayList<String[]> list) {
for(String[]s : list) {
if(!results.containsKey(s[0])) {
results.put(s[0], Arrays.copyOfRange(s, 1, s.length));
} else {
String[] current = results.get(s[0]);
results.put(s[0], concat(current, Arrays.copyOfRange(s, 1, s.length)));
}
}
}
这给我的输出中(不正确的,因为没有“填充”)
key4 [a, a, a]
key3 [c, c]
key2 [a, a, a, b, b]
key1 [a, a, a, b, b]
是否所有的数组总是有表1和2中相同的长度? – user1438038
在同一列表中,数组的长度相同。但是list1和list2中的数组可以有不同的大小。 – ThomasThiebaud
并且列表2还可以包含一个不是*列表1中存在的键吗? – user1438038