在Java中向对象添加多个元素
Posted
技术标签:
【中文标题】在Java中向对象添加多个元素【英文标题】:Add multiple elements to Object in Java 【发布时间】:2022-01-08 18:28:32 【问题描述】:我对枚举使用以下映射并添加enum
,如下所示:
final Map<String, Object> enums = new HashMap<>();
enums.put("ZoneIds", gmtValues());
ZoneIds
枚举有一个从该方法返回的 List<String>
:
private static List<String> gmtValues()
return ... // code omitted for brevity
private static List<String> gmtNames()
return ... // code omitted for brevity
但是,我想在同一个对象中传递另一个列表,然后在前端检索这两个传递的值作为ZoneIds.value
和ZoneIds.name
。那么,我该怎么做呢?
【问题讨论】:
放一个列表?或者更好的是,设计您自己的包含两个列表的对象类。 我无法更改final Map<String, Object> enums = new HashMap<>();
。那么,如何在不改变这一点的情况下解决问题呢?
就这样。包含两个列表的自定义对象将是 Object
的子类,因此就像您可以将列表放入地图一样,您也可以放入自定义对象。
【参考方案1】:
以下选项是可能的:
"ZoneIds"
是列表列表,name
和 value
按索引正确排序
"ZoneIds": [["name1", "value1"], ["nameN", "valueN"]]
然后假设gmtNames()
和gmtValues()
返回的列表大小相等,则名称/值会像这样连接:
List<String> names = gmtNames();
List<String> values = gmtValues();
List<List<String>> nameValueList = IntStream.range(0, Math.min(names.size(), values.size()))
.mapToObj(i -> Arrays.asList(names.get(i), values.get(i)))
.collect(Collectors.toList());
enums.put("ZoneIds", nameValueList);
"ZoneIds"
是地图列表:
"ZoneIds": ["name":"name1", "value":"value1", "name":"nameN", "value":"valueN"]
List<Map<String, String>> listMaps = IntStream.range(0, Math.min(names.size(), values.size()))
.mapToObj(i -> Map.of("name", names.get(i), "value", values.get(i)))
.collect(Collectors.toList());
enums.put("ZoneIds", listMaps);
简单映射,键取自
gmtNames()
列表:
"ZoneIds": "name1":"value1", "nameN":"valueN"
Map<String, String> nameValueMap = IntStream.range(0, Math.min(names.size(), values.size()))
.boxed()
.collect(Collectors.toMap(
names::get, // key from names list
values::get, // value from values list
(v1, v2) -> v1, // merge function in case of conflicts
LinkedHashMap::new // keep insertion order
));
enums.put("ZoneIds", nameValueMap);
【讨论】:
以上是关于在Java中向对象添加多个元素的主要内容,如果未能解决你的问题,请参考以下文章