【问题标题】:Java: How to properly remove a value from a HashMap NOT based on the keyJava:如何正确地从 HashMap 中删除一个值而不是基于键
【发布时间】:2016-11-28 13:05:56
【问题描述】:

我有一个 Singleton 类,里面有一个 HashMap。 HashMap 由StringSet<String> 组成:

private Map<String, Set<String>> mMap = new HashMap<>();

我想达到什么目标?

Map 内的所有Set 值中删除给定项目。例如:

mMap.put(keyName, new HashSet<String>())
....
mViewsSwipeStates.get(keyName).add("1");
mViewsSwipeStates.get(keyName).add("2");
mViewsSwipeStates.get(keyName).add("3");
....
//Remove an item from the set 
 mMap.values().remove("3"); //Does not work

Set 中删除项目的正确方法是什么?

【问题讨论】:

  • 需要先从地图中获取物品:mViewsSwipeStates.get(keyName).remove(productCode);

标签: java android hashmap set


【解决方案1】:

我假设您想从 Map 的所有值中删除 productCode(而不仅仅是从特定键的值中删除)。

您必须遍历Map 的所有值,并从每个值中删除所需的元素:

mMap.values().forEach(v->v.remove(productCode));

此代码假定Map 中没有空值。

编辑:

在 Java 7 中,您可以编写:

for (Set<String> value : mMap.values()) {
    value.remove(productCode);
}

【讨论】:

  • 是的,但我正在为一个 Android 应用程序写这篇文章,我忘了提及它,对此感到抱歉。但是你能提供同样的东西但没有 lambda 吗?
  • @user3182266 确定
【解决方案2】:

遍历所有映射条目,改变每个条目的值:

map.forEach((k, v) -> v.remove(productCode)};

【讨论】:

    【解决方案3】:

    使用 java 8 和 lambda 表达式

    map.forEach((key, value) -> value.remove(productCode));
    

    【讨论】:

      猜你喜欢
      • 2021-01-28
      • 2015-12-28
      • 1970-01-01
      • 1970-01-01
      • 2016-03-11
      • 1970-01-01
      • 2022-06-30
      • 1970-01-01
      • 2019-06-26
      相关资源
      最近更新 更多