如何定义List<Map<String, Object>>的大小?
How to define the size of List<Map<String, Object>>?
我正在制作一个需要 return 列表的方法。
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
的方法.我尝试了以下方法,但都出现错误:
List<Map<String, Object>> oMapList = new ArrayList<>(dOList.size());
但这给了集合一个容量,实际上并没有效果。
List<Map<String, Object>> oMapList = Arrays.asList(new Map<String, Object>[dOList.size()];
给出通用数组创建错误。
还有其他方法可以解决这个问题吗?
不确定我是否真的理解了这个问题,但查看代码似乎您想要一个地图列表,但您只向列表添加了一个地图,这没有意义。
也许你想要的是:
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;
}
在每次迭代中创建一个新地图,并将其添加到列表中。
我正在制作一个需要 return 列表的方法。
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
的方法.我尝试了以下方法,但都出现错误:
List<Map<String, Object>> oMapList = new ArrayList<>(dOList.size());
但这给了集合一个容量,实际上并没有效果。List<Map<String, Object>> oMapList = Arrays.asList(new Map<String, Object>[dOList.size()];
给出通用数组创建错误。
还有其他方法可以解决这个问题吗?
不确定我是否真的理解了这个问题,但查看代码似乎您想要一个地图列表,但您只向列表添加了一个地图,这没有意义。
也许你想要的是:
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;
}
在每次迭代中创建一个新地图,并将其添加到列表中。