【问题标题】:Add new element to HashMap but not found when query - Kotlin向 HashMap 添加新元素但查询时未找到 - Kotlin
【发布时间】:2019-07-25 12:35:24
【问题描述】:

我正在尝试根据键值向HashMap 添加新的列表元素,其值为嵌套列表。

这是我初始化的类:

private val portalDummyData = listOf(
Portal(
  id = "p1", address = "Moringa", clientID = "c1", clientSecret = "cs1", agents = mutableListOf(
    Agent(
      "agent1", "agent", email, listOf(
        "p1"
      )
    ),
    Agent(
      "agent2", "agent2", email, listOf(
        "p1", "p2"
      )
    )
  )
 )
)
private val portalHashMap = HashMap<String, Portal>()

init {
  portalDummyData.forEach { portalHashMap[it.id] = it }
}

您可以看到portalHashMap 的每个值我存储为列表,并且该列表中包含另一个列表。所以,我想将新的列表元素添加到保留在其父列表中的列表中。但是当我添加新元素并且找不到该元素时。

这是我尝试添加新列表元素的代码:

override suspend fun addAgentToPortal(agent: Agent, id: String) {
val portal = portalHashMap[id]
if (portal != null) {
  val agents = portal.agents
  agents.toMutableList().add(agent)
  print(agents.count())
} else {
  throw NotFoundException("Portal not found")
}
}

我想将新的Agent 模型添加到那个Portal 模型但是当我println(agents.count()) 但值仍然与默认值相同。

【问题讨论】:

  • agents 已经是可变列表,为什么还要转换它?
  • toMutableList 创建一个新列表。其他所有toXXX 方法也是如此。

标签: list kotlin hashmap


【解决方案1】:

使用可变列表而不是列表。您不能在 List 中添加新元素

Portal(
        id = "p1", address = "Moringa", clientID = "c1", clientSecret = "cs1", 
        agents = mutableListOf(
            Agent( "agent1", "agent", email, listOf("p1")),
            Agent("agent2", "agent2", email, listOf("p1", "p2"))
        )
    )

【讨论】:

  • 我改成mutableListOf()还是不行。
  • 您是否真的在您的 Portal 中创建了可变代理列表,还是只是做了 agent.toMutableList().add(agent)?在第二种情况下,您刚刚创建了不可变列表的可变副本,这是另一个列表。
  • 我刚刚在 Portal 中创建了 mutableListOf 的代理
  • 好的。然后删除agents.toMutableList().add(agent),然后添加agents.add(agent)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-25
  • 2018-06-28
  • 1970-01-01
  • 2016-03-06
  • 1970-01-01
  • 2014-05-01
相关资源
最近更新 更多