Это обычная проблема для начинающих разработчиков, когда я был репетитором по программированию, это была одна из самых распространенных проблем после того, как люди поняли, как использовать циклы и массивы. Проблема заключается в том, что subresult1 на самом деле является ссылкой на объект. Когда вы используете эту строку sub1_arr.add(subResult1)
, это всегда одна и та же ссылка в памяти, поэтому к тому времени, когда вы дойдете до последней итерации, все значения будут такими же, потому что вы обновляли тот же объект в памяти. Вы можете решить эту проблему, добавив new
к объекту subResult1. Я не знаю, какой у вас тип объекта, потому что он не включен в образец, но предположим, что выше у вас есть это:
Map<String, String> subResult1 = new HashMap<String, String>();
В свой код вам нужно будет добавить это:
// subResult - layer2 subResult1 = new HashMap ();
Это по существу перезаписывает ссылку памяти на исходную карту и создает новую со ссылкой на новую карту. Теперь старая карта все еще там, потому что вы добавили ее в sub1_arr. Но когда вы присваиваете значения с помощью 'put', он будет назначать их вашему новому объекту.
Есть много способов улучшить это, но для начала я обычно объявляю переменные как близко к тому, что они мне нужны, как могу (не создавая лишнего беспорядка). Поэтому я бы переместил ваше объявление subresult1 в то же место и просто удалил его выше l oop. Вот так:
//subResult - layer2
Map<String, String> subResult1 = new HashMap<String, String>();
Надеюсь, это поможет!