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

标签 java lambda java-8

我有一个包含 map 的对象列表。
该对象如下所示:

public class SwiftObject {
    private Map<String, String> metadata;
    ...
}

我正在尝试根据存储在其 Map 中的键和值来过滤我的对象。
我的过滤条件包含在另一个 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 映射不包含空值

最佳答案

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

关于java - 验证一个 Map 中的所有键/值对是否存在于另一个 Map 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33024356/

相关文章:

java - 如何将游标或记录列表传递给pl/sql中的java过程?

java - Maven 不包括 sqlite-jdbc

java - 如何在 spring boot 应用程序中检查嵌入式 tomcat 的健康状况?

java - 如何获取 Java 8 方法引用的 MethodInfo?

java - 实现封装的正确方法

java - jaxb2-maven-plugin :schemagen to work with JDK8? 是否有修复

java - Spring RepositoryRestResource 带有路径参数?

node.js - NodeJS 基本认证

c# - 是否有一个通用系统委托(delegate)接受两种类型并返回第二种

Java 8 API 静态方法在非空输入上运行函数,或返回 nullValue