验证Map中的所有键/值对是否存在于另一个Map中

时间:2015-10-08 19:26:45

标签: java lambda java-8

我有一个包含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映射不包含空值

1 个答案:

答案 0 :(得分:19)

使用Map.equals(Map other)检查两个映射是否包含相同的映射。如果您只需要检查地图是否是另一个地图的子集,请使用map.entrySet().containsAll(other.entrySet())