2016-11-28 6 views
1

Singletonクラスには、内部にHashMapがあります。 HashMapのはStringSet<String>で構成されていますJava:キーに基づいていないHashMapから適切に値を削除する方法

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の中から項目を削除する正しい方法は何ですか?

+0

最初にマップからアイテムを取得するには:mViewsSwipeStates.get(keyName).remove(productCode); –

答えて

4

Mapのすべての値(特定のキーの値だけでなく)からproductCodeを削除するとします。

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

このコードは、Mapにはnull値が存在しない前提としています

あなたはMapのすべての値を反復して、それぞれ必要な要素から削除する必要があります。

EDIT:あなたが書くことができたJava 7では

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

はい、私はこれをAndroidアプリ用に書いていますが、残念ながら言及していませんでした。しかし、同じことをラムダなしで提供することはできますか? – user3182266

+0

@ user3182266確かに – Eran

+0

ライブセイバー:ありがとう – user3182266

0

それぞれの値を変異すべてのマップエントリを反復処理する、:

のJava 8とラムダ式を使用して
map.forEach((k, v) -> v.remove(productCode)}; 
0

map.forEach((key, value) -> value.remove(productCode)); 
関連する問題