【问题标题】:How to define the size of List<Map<String, Object>>?如何定义 List<Map<String, Object>> 的大小?
【发布时间】:2020-04-11 15:49:20
【问题描述】:

我正在制作一个需要返回列表的方法。

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) 属性,因为要解决此问题,我需要使用 setter,但我似乎找不到初始化 oMapList 的方法。我尝试了以下方法,但都给出了错误:

  1. List&lt;Map&lt;String, Object&gt;&gt; oMapList = new ArrayList&lt;&gt;(dOList.size()); 但这给了集合一个容量,实际上并没有效果。
  2. List&lt;Map&lt;String, Object&gt;&gt; oMapList = Arrays.asList(new Map&lt;String, Object&gt;[dOList.size()]; 给出一个通用数组创建错误。

还有其他方法可以解决这个问题吗?

【问题讨论】:

  • 如果需要固定列表的大小,只需将其转为数组,使用List.asArray()List.asArray(new TypeOfList[0]);即可。
  • @Schred,当我输入 List. 时,我看到的唯一选项是 class、new 和 try..
  • 是实例方法,需要在列表中调用:ordersMapList.asArray();

标签: java object arraylist initialization size


【解决方案1】:

不确定我是否真的理解了这个问题,但查看代码似乎你想要一个地图列表,但你只向列表中添加了一个地图,这是没有意义的。

也许你想要的是这样的:

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;
}

在每次迭代中创建一个新地图,并将其添加到列表中。

【讨论】:

    猜你喜欢
    • 2018-09-22
    • 1970-01-01
    • 1970-01-01
    • 2020-08-01
    • 1970-01-01
    • 2021-04-29
    • 2020-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多