【问题标题】:How to add new key value to existing List Map object in java如何在java中向现有的List Map对象添加新的键值
【发布时间】:2017-12-01 11:18:36
【问题描述】:

在下面的代码中,我正在获取文档映射,我想向文档对象添加新的键和值。

public List<Map<String, Object>> getDocuments() {
    String sql = "Select * from docs";
    List<Map<String, Object>> Documents = jdbcTemplateObject.queryForList(sql);
    return Documents;
}

输出:

[{Id=DOC10,Name=Test Document,Date=10-12-17}],
[{Id=DOC11,Name=Sample Document,Date=15-12-17}]

如何向这个 List&lt;Map&gt; 对象添加一个新的 k,v 以使输出看起来像这样?

[{Id=DOC10,Name=Test Document,Date=10-12-17,Access=true}],
[{Id=DOC11,Name=Sample Document,Date=15-12-17,Access=true}]

【问题讨论】:

  • 您使用的是Map&lt;String,Object&gt;,所以只需使用put("Access", true),现在,这应该从ResultSet 完成,以获得true/false 的值我相信。您可以根据方法的逻辑简单地执行select *, true as Access from docs
  • 这似乎是一个相当奇怪的请求。通常,您不会手动将数据添加到 SQL 结果集中。也许你可以解释为什么你认为你需要这样做。
  • 我会根据 Java 规范将该变量设为小写,例如“document”。
  • 我想使用 angularjs 在 UI 中显示字段 access= true 的文档,所以我需要在服务器端添加这个新的键值对
  • @user1909711 但该值存储在哪里?

标签: java data-structures hashmap core


【解决方案1】:

您可以遍历列表并为每个映射添加一个新的键值对:

for(Map<String, Object> map : Documents){
     map.put("Access", true);
}

【讨论】:

  • 我已经迭代了但是抛出异常为 java.util.ConcurrentModificationException
  • Java 8 版本:documents.forEach(doc -&gt; doc.put("Access", true));
  • @user1909711 似乎列表或地图正在被其他线程修改。尝试使用迭代器或普通的for 循环。
【解决方案2】:

另一种解决方案,取决于 jdbcTemplateObject.queryForList(sql); 所做的是在查询中添加值。

select *, 1 as Access from docs

这似乎在每一列上进行迭代以将其插入Map

注意:查询不一定独立于 DBMS! Boolean 并不是真正的 SQL 类型

【讨论】:

    【解决方案3】:

    遍历列表> 文档并获取 Map 对象并将键值对放入该 Map 对象 例如,g

    List<Map<String, Object>> Documents = jdbcTemplateObject.queryForList(sql);
        for (Map<String, Object> map : Documents) {
            map.put(key, value);
        }
    

    【讨论】:

      猜你喜欢
      • 2019-11-08
      • 1970-01-01
      • 1970-01-01
      • 2021-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-01
      • 2020-07-27
      相关资源
      最近更新 更多