我有一个包含Map的对象列表。 该对象如下所示:
public class SwiftObject {
private Map<String, String> metadata;
...
}
我正在尝试根据存储在Map中的键和值来过滤我的对象 我的过滤条件包含在另一张地图中 我想过滤并保留Map在过滤器Map中包含所有键/值的所有对象。
这是我写的代码:
List<? extends SwiftObject> swiftObjects = documentStore.listAllObjects(container);
Map<String, String> searchMetadata = gssDocument.getMetadataMap();
List<SwiftObject> filteredSwiftObjects = swiftObjects.stream()
.filter(swiftObject ->
searchMetadata.entrySet().stream()
.allMatch(entry -> entry.getValue().equals(swiftObject.getMetadata().get(entry.getKey())))
)
.collect(Collectors.ToList());
这是正确的方法吗?还是可以重构/优化? searchMetadata映射不包含空值
答案 0 :(得分:19)
使用Map.equals(Map other)
检查两个映射是否包含相同的映射。如果您只需要检查地图是否是另一个地图的子集,请使用map.entrySet().containsAll(other.entrySet())
。