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);
我有一个 hashmap 数据说
{1={Context=Legacy, Owner=Ram, Number=xyz}, 2={Context=Legacy, Owner=Ram,
Number=xxx}, 3={Context=Legacy, Owner=Sri, Number=xrt}}
如何过滤掉这个包含 Owner=Ram
预期结果:
{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);