Java HashMap 过滤

Java HashMap Filtering

我有一个 hashmap 数据说

{1={Context=Legacy, Owner=Ram, Number=xyz}, 2={Context=Legacy, Owner=Ram,
 Number=xxx}, 3={Context=Legacy, Owner=Sri, Number=xrt}}

如何过滤掉这个包含 Owner=Ram

的映射的 Hashmap

预期结果:

{1={Context=Legacy, Owner=Ram, Number=xyz}, 2={Context=Legacy, Owner=Ram, Number=xxx}}

如果你碰巧使用 Java 8 那么你可以通过使用 Map.values() and Collection.removeIf():

来实现
Map<Integer, MyCustomObject> map = ...;
map.values().removeIf(o -> !o.getOwner().equals("Ram"));

对于 Java 8 之前的版本,您可以使用 Iterator:

实现相同的效果
Map<Integer, MyCustomObject> map = ...;
for(Iterator<MyCustomObject> iter = map.values().iterator(); iter.next();){
    if(!iter.next().getOwner().equals("Ram")){
        iter.remove();
    }
}

两者都将删除具有 Owner != Ram.

的每个条目

如果您使用的是 java8 或更高版本。

// If you have setup like this
Map<Integer, Map<String, String>> m = new HashMap<>();
Map<String, String> c1 = new HashMap<>();
c1.put("Context", "Legacy");
c1.put("Owner", "Ram");
c1.put("Number", "xyz");
m.put(1, c1);
Map<String, String> c2 = new HashMap<>();
c2.put("Context", "Legacy");
c2.put("Owner", "NotRam");
c2.put("Number", "xyz");
m.put(2, c2);

// you can do like this.
Map result = m.entrySet().stream()
            .filter(x -> x.getValue().entrySet().stream()
                    .anyMatch(y -> y.getKey().equals("Owner") && y.getValue().equals("Ram")))
            .collect(Collectors.toMap(e -> e.getKey(), e -> e.getValue()));

System.out.println(result);