在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&lt;String&gt;

private static List<String> gmtValues() 
        return  ... // code omitted for brevity
    


private static List<String> gmtNames() 
        return  ... // code omitted for brevity
    

但是,我想在同一个对象中传递另一个列表,然后在前端检索这两个传递的值作为ZoneIds.valueZoneIds.name。那么,我该怎么做呢?

【问题讨论】:

放一个列表?或者更好的是,设计您自己的包含两个列表的对象类。 我无法更改final Map&lt;String, Object&gt; enums = new HashMap&lt;&gt;();。那么,如何在不改变这一点的情况下解决问题呢? 就这样。包含两个列表的自定义对象将是 Object 的子类,因此就像您可以将列表放入地图一样,您也可以放入自定义对象。 【参考方案1】:

以下选项是可能的:

"ZoneIds" 是列表列表,namevalue 按索引正确排序
"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中向对象添加多个元素的主要内容,如果未能解决你的问题,请参考以下文章

在Postgres中向JSON对象添加元素

如何在 smack 中向 chatmanager 添加多个聊天?

在单个 JSON Patch 操作中向数组添加多个值?

如何在 Django 中向模型添加临时字段?

在 React 中向 DOM 添加新元素

如何在AS3中向数组添加元素?