清除哈希图的所有值,除了两个键/值对

Bip*_*and 7 java collections

我有HashMap数百个键/值对。

现在我必须删除除2 个键/值之外的所有键/值。我用过这种方式:

if(map!=null){
     String search = map.get(Constants.search);
     String context = map.get(Constants.context);
     map = new HashMap<>();
     map.put(Constants.search,search);
     map.put(Constants.context,context);
}   
Run Code Online (Sandbox Code Playgroud)

但是 java 8 引入removeIf()了这些条件。我怎样才能用removeIf()方法解决这个问题?

azr*_*zro 10

你需要这样:

map.keySet().removeIf(k -> !(k.equals(Constants.search) || k.equals(Constants.context)));
Run Code Online (Sandbox Code Playgroud)

它将迭代keys并删除那些key不需要的那些keys


epo*_*pox 6

但更短(从 Java 2 开始)

map.keySet().retainAll(myKeys);
Run Code Online (Sandbox Code Playgroud)

由于keySet()仍然包装了原始的HashMap,因此它的#retainAll()会影响Map。

myKeys 是键的集合,例如:myKeys = List.of("key1", "key2")