Я делаю метод, который должен вернуть список.
private List<Map<String, Object>> mapDO(List<dO> dOList) {
List<Map<String, Object>> ordersMapList = new ArrayList<>();
Map<String, Object> ordersMap = new HashMap<>();
for (int i = 0; i < dO.size(); i++) {
ordersMap.clear();
ordersMap.put("description", dOList.get(i).getDescription());
ordersMap.put("size", dOList.get(i).getSize());
System.out.println(i);
System.out.println(ordersMap);
ordersMapList.add(ordersMap);
System.out.println(ordersMapList);
}
return ordersMapList;
}
Проблема в следующем: Arraylist stores the reference and does not copy/create new objects. If you change the stored object reference, it will be reflected in the arrayList as well.
Вывод кода выше:
0
{size=One size, description=Product 1}
[{size=One size, description=Product 1}]
1
{size=One size, description=Product 2}
[{size=One size, description=Product 2}, {size=One size, description=Product 2}]
2
{size=One size, description=Product 3}
[{size=One size, description=Product 3}, {size=One size, description=Product 3}, {size=One size, description=Product 3}]
Я пытался использовать свойство .set (index, element), потому что это исправить Мне нужно использовать сеттеры, но я не могу найти способ инициализации oMapList
. Я пробовал следующее, но все они дают ошибки:
List<Map<String, Object>> oMapList = new ArrayList<>(dOList.size());
, но это дает набор емкости и фактически не дает эффекта. List<Map<String, Object>> oMapList = Arrays.asList(new Map<String, Object>[dOList.size()];
, который дает ошибка создания массива Generi c.
Есть ли другой способ исправить это?