我有一个嵌套文档的 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/