我有幾個字符串數組列表。我想根據每個數組的第一個元素將這些列表合併到一個列表中。如何合併幾個基於第一個元素的數組列表?
基本上,我想在這一個
[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