从 MongoDB 返回的嵌套文档的 Java 8 Stream 实现

标签 java java-8 java-stream flatmap

我有一个嵌套文档的 MongoDB 集合,如下所示。我正在尝试读取 TestCase 对象中的标签。现在我的实现非常基本,有 4 个 for 循环。我是 java8 的新手,我想使用流或任何简单的方法来读取嵌套数据集。

class TestResults {
        public String ID;   
        DateTime timeStamp;
        List<TestCapability> testCapability;
}

class TestCapability {
        public String ID;   
        DateTime timeStamp;
        List<TestSuite> testSuite;
}

class TestSuite {
        public String ID;   
        DateTime timeStamp;
        List<TestCase> testCase;
}

class TestCase {
        public String ID;   
        DateTime timeStamp;
        List<TestSteps> testSteps;
        private Set<String> tags = new HashSet<>();
}

我当前的实现非常糟糕,如下

    for (TestResult testResult : testResults) {
        for (TestCapability capability : testResult.getTestCapabilities()) {
            for (TestSuite testSuite : capability.getTestSuites()){
                for (TestCase testCase : testSuite.getTestCases()) {
                    for (Feature feature : featureDetails) { 
                        if (testCase.getTags().contains(feature.getsNumber())){
                            testResultsAuditResponse.setsId(feature.getsId());
                            testResultsAuditResponse.setsNumber(feature.getsNumber());
                            testResultsAuditResponse.setsName(feature.getsName());
                            testResultsAuditResponse.setsStatus(feature.getsStatus());
                        }
                    }
                }
            }
        }
    }

最佳答案

答案是使用 flatMap:

testResults.stream()
    .map(TestResult::getTestCapabilities).flatMap(Collection::stream)
    .map(TestCapability::getTestSuites).flatMap(Collection::stream)
    .map(TestSuite::getTestCases).flatMap(Collection::stream)
    .forEach(testCase -> {
        featureDetails.stream()
            .filter(feature -> testCase.getTags().contains(feature.getsNumber()))
            .map(Feature::getsId)
            .forEach(testResultsAuditResponse::setsId);
    });

关于从 MongoDB 返回的嵌套文档的 Java 8 Stream 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49375874/

相关文章:

java - 它如何从 mybatis 中返回Optional<List<VO>>

Java根据utf-8编码索引查找字符串的索引

java - 在java流中映射和应用

java - 自定义任务执行器或 "am I reinventing the wheel?"

Java 8 流 : count all elements which enter the terminal operation

java - unix date 命令和 java simpledateformat 的差异

java - 我的 for 循环有问题。我以前从未使用过这种类型,它不像常规循环那样工作

java - 如何修复gradle错误?

java - Guava 的 Streams::findLast 实现

java - 将一个 HashMap 缩减为另一个 HashMap