私はMap<String, ArrayList>
およびSet<String>
。マップ全体を反復することなく、指定されたキーを持つペアのみが残るように、マップのキーを一連の文字列と「交差」させる方法はありますか?私の主な関心事はパフォーマンスであり、よりエレガントにできる何かに車輪を再発明することです。
ただやる:
map.keySet().retainAll(set);
javadoc に従って、キーセットの変更はマップに反映されます。
...セットはマップに連動しているため、マップへの変更はセットに反映され、その逆も同様です。 ...
デモは次のとおりです。
Map<String, String> map = new HashMap<String, String>();
map.put("1", "one");
map.put("2", "two");
map.put("3", "three");
Set<String> set = new HashSet<String>();
set.add("1");
set.add("3");
map.keySet().retainAll(set);
System.out.println(map); // {3=three, 1=one}
BalusCの優れた答えを詳しく説明すると、values()はretainAll()もサポートします。
Map<String, String> map = new HashMap<String, String>();
map.put("1", "one");
map.put("2", "two");
map.put("3", "three");
Set<String> set = new HashSet<String>();
set.add("one");
set.add("two");
map.values().retainAll(set);
System.out.println(map); // prints {1=one, 2=two}
retailAllは、予想どおり、重複した値も保持します。
Map<String, String> map = new HashMap<String, String>();
map.put("1", "one");
map.put("2", "two");
map.put("3", "three");
map.put("4", "two");
Set<String> set = new HashSet<String>();
set.add("one");
set.add("two");
map.values().retainAll(set);
System.out.println(map); // prints {1=one, 2=two, 4=two}