Как определить размер списка >? - PullRequest
0 голосов
/ 11 апреля 2020

Я делаю метод, который должен вернуть список.

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. Я пробовал следующее, но все они дают ошибки:

  1. List<Map<String, Object>> oMapList = new ArrayList<>(dOList.size());, но это дает набор емкости и фактически не дает эффекта.
  2. List<Map<String, Object>> oMapList = Arrays.asList(new Map<String, Object>[dOList.size()];, который дает ошибка создания массива Generi c.

Есть ли другой способ исправить это?

1 Ответ

1 голос
/ 11 апреля 2020

Не уверен, что я действительно понял вопрос, но, глядя на код, кажется, что вам нужен список карт, но вы добавляете в список только одну карту, которая не имеет смысла.

Возможно, что Вы хотите это:

private List<Map<String, Object>> mapDO(List<dO> dOList) {
    List<Map<String, Object>> ordersMapList = new ArrayList<>();


    for (int i = 0; i < dO.size(); i++) {
        Map<String, Object> ordersMap = new HashMap<>();
        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;
}

, который создает новую карту в каждой итерации и добавляет ее в список.

...