【发布时间】:2021-05-13 02:04:16
【问题描述】:
我有一张地图HashMap<sId, List<Bannas>>,其中sId 与列表中的许多 Id 相似,而且我还有一种方法 getListbySId(在 sId 中)。
通过使用这种方法,我可以获得基于 sId 的具有相似值的值列表。
现在我必须从基于 sId 的值列表中删除一个值,然后可以通过迭代过程来比较值列表的 id。如果匹配,我将删除它。除了这种方法,任何人都可以说另一种方法来删除值或获取值而不改变要求。我无法提供代码请帮助我。
【问题讨论】:
-
我猜
map.keySet().removeIf( id -> id.equals( otherSId ) );是你需要的…… -
你能在remove if condition中解释更多吗
-
@Kaplan
map.keySet().removeIf( id -> id.equals( otherSId ) );与map.remove( otherSId );完全相同,只是由于线性迭代效率较低。 -
@Kaplan 根据地图的大小,即使是三个删除操作也会比在整个地图上运行
removeIf更有效。对于更多键,您甚至可以使用map.keySet().removeAll(Set.of(sID1,sID2, sID3…));,它将自动选择更适合地图当前大小和参数集大小的策略。除此之外,还不清楚 OP 中的句子中的“相似”是什么意思,例如“其中 sId 对于列表中的许多 Id 是相似的”。 -
@Kaplan 嗯?
keySet().removeAll(Set.of(…))是迭代器的替代品。我不知道 OP 的“相似”实际上是什么意思。 OP 的句子“其中 sId 对于列表的许多 Id 是相似的”而是表明它实际上意味着“相等”,因为一个 list 的所有元素都映射到映射的相同键。只要我们不知道 OP 真正想要什么,就没有必要提供不必要使用removeIf的示例。
标签: java list collections hashmap iterator