2016-04-08 3 views
0

У меня есть 2 ArrayLists (одного и того же размера) в формате JSON, как показано ниже:Merge ArrayList карт в формате JSON, Java

List<HashMap<String, String>> list1 = new Arraylist<HashMap<String, String>>(); 

List<HashMap<String, String>> list2 = new Arraylist<HashMap<String, String>>(); 

Я хочу, чтобы объединить вышеуказанные списки в один.

Для экс:

List1:

[{ " key1": "value1", " key2": "value2"}, 
{ " key11": "value11", " key22": "value22"}] 

List2:

[{ " key3": "value3"},{" key33": "value33"}] 

Ожидаемый результат:

[{ " key1": "value1", " key2": "value2", " key3": "value3"}, 
{ " key11": "value11", " key22": "value22", " key3": "value3"}] 

Ранний ответ будет высоко оценен. Заранее большое спасибо.

+0

Каков ваш исходный вход? Являются ли эти значения JSON или Java POJO? – fge

+0

Исходный ввод - это списки, которые я хочу объединить, и значения json – learner

+0

Затем посмотрите [здесь] (https://github.com/fge/json-patch) – fge

ответ

1

Ваш ожидаемый выход, вероятно, будет:

[{ "key1": "value1", "key2": "значение2", "ключ3": "value3"}, { "key11": " значение11 "," key22 ":" value22 "," key33 ":" value33 "}]

Вы не указали, имеют ли два списка одинакового размера или нет. Согласно вашему примеру, я предположил, что списки имеют одинаковый размер. Таким образом, код может быть, как показано ниже:

for (int i = 0; i < list1.size(); i++) { 
    list1.get(i).putAll(list2.get(i)); 
} 
+0

Превосходно !! Спасибо тонне. Это то, что я искал. Я отредактирую вопрос, чтобы упомянуть о том же размере. – learner

2

Если два ArrayList имеют одинаковый тип (они кажутся ArrayList карт):

list1.addAll(list2) 
+0

Спасибо за ваш ответ. list1.addAll (list2) дает следующие O/p: [{{key1 ":" value1 "," key2 ":" value2 "}, {" key3 ":" value3 "}}, {{" key11 " : "value11", "key22": "value22"}, {"key3": "value3"}}] – learner

0

Edit: вы можете сделать, как это

for (HashMap<String, String> m : list2) { 
     HashMap<String, String> t = list1.get(list2.indexOf(m)); 
     for(String key: t.keySet()){ 
      m.put(key, t.get(key)); 
     } 
    } 

Теперь Объединять предметы в песни2.

+0

Спасибо за ваш ответ. list1.addAll (list2) не дает ожидаемого O/p i.e.он дает: [{{"key1": "value1", "key2": "value2"}, {"key3": "value3"}}, {{"key11": "value11", "key22": "value22 "}, {" key3 ":" value3 "}}] – learner

+0

Я проверил, правильный json:' [{"key1": "value1", "key2": "value2"}, {"key3": " value3 "}, {" key11 ":" value11 "," key22 ":" value22 "}, {" key3 ":" value3 "}]' Ваш json недействителен в 1-м месте '[{{" key1 ": "value1", "key2": "value2"}, {"key3": "value3"}}, {{"key11": "value11", "key22": "value22"}, {"key3": "value3 "}}]' как вы ошибаетесь? –

+0

Извините, если я не понял. Как вы заметили, после выполнения list1.addAll (list2) ... O/P является [{"ключ1": "значение1", "ключ2": "значение2"}, {"ключ3": "значение3"}, { "key11": "value11", "key22": "value22"}, {"key3": "value3"}]. Однако, как указано в вопросе, потребность в O/PI: [{«key1»: «value1», «key2»: «value2», «key3»: «value3»}, {"key11": "value11" , "key22": "value22", "key3": "value3"}] – learner

0

Вы просто должны извлечь HashMap из отдельных списков, а затем объединить их все вместе

для например

HashMap m = new HashMap(); 
     m.put("key1", "val1"); 
     m.put("key2", "val2"); 

     HashMap m1 = new HashMap(); 
     m1.put("key3", "val3"); 
HashMap mergeMap = new HashMap(); 
     mergeMap.putAll(m); 
     mergeMap.putAll(m1); 

     System.out.println("Map:" + mergeMap); 

Выход

Карта: {key3 = val3, key2 = val2, key1 = val1}