3
Map<String,String> map=request.getParameterMap();

^ は変更不可能なマップです。

Set s1= map.keySet();
Set s2= map2.keySet();/* another keyset of local map*/

を使用s1.retainAll(s2)すると例外がスローされます。at java.util.collections$unmodifiablecollection.retainall

ここでrequest.getParameterMap()は、変更不可能なマップを返します。ローカル マップを作成してみました。しかし、問題はまだ解決していません。いくつかの解決策を提案します。

4

2 に答える 2

2

Set.retainAll メソッドは、呼び出されているセットを変更します。keySet変更不可能なマップの方法が基になるマップの単なるビューであると仮定すると、変更は許可されません。おそらく、新しい (変更可能な) セットを作成してから、そこからアイテムを削除する必要があります。

Set s1 = new HashSet(map.keySet());
s1.retainAll(s3);
于 2012-05-23T05:00:52.867 に答える
0

返されるキーセットも unmodifiableSet であるため、変更不可能なマップのキーセットを変更することはできません。unmodifiableMap からローカル マップを作成してから、ローカル マップ キーセットでretainAllを使用できます。

Map map1 = new HashMap();
map1 = Collections.unmodifiableMap(map1);
Map map2 = new HashMap();
Map map3 = new HashMap(map1);
Set s1 = map1.keySet();
Set s2 = map2.keySet();
Set s3 = map3.keySet();
s3.retainAll(s2);
于 2012-05-23T05:01:37.060 に答える