java - Java8 lambda 两个集合减法
问题描述
DTO
public class Result {
private List<Module> modules;
}
public class Module {
private String name;
private List<TestCase> testCases;
}
public class TestCase {
private String name;
private String result;
}
假设我有两个项目,
<!-- Result1 -->
<Result>
<Module name="a">
<TestCase name="tc1" result="pass"/>
<TestCase name="tc2" result="pass"/>
</Module>
<Module name="b">
<TestCase name="tc1" result="pass"/>
<TestCase name="tc2" result="pass"/>
<TestCase name="tc3" result="pass"/>
</Module>
</Result>
<!-- Result2 -->
<Result>
<Module name="a">
<TestCase name="tc1" result="pass"/>
</Module>
</Result>
我想得到两组 Result1 和 Result2 的交集
(例如result1.intersection(result2))
结果
<Result>
<Module name="a">
<TestCase name="tc2" result="pass"/>
</Module>
<Module name="b">
<TestCase name="tc1" result="pass"/>
<TestCase name="tc2" result="pass"/>
<TestCase name="tc3" result="pass"/>
</Module>
</Result>
我知道如何将这两个集合相交。但是,如果存在集合的集合,我不知道如何与集合相交。
如何使用 java 8 流来做到这一点?或其他方式?
解决方案
您应该为您的 Module 类实现 equals 方法,然后您可以使用类似于此的方法:
public Result intersection(Result r1, Result r2) {
Result result = new Result();
r1.getModules().forEach(module -> {
if (r2.getModules().contains(module)) {
result.getModules().add(module);
}
});
return result;
}
推荐阅读
- linux - 在 Linux 目录中搜索确切数量的文件
- python - 如何将 ax^2 长列表转换为形状列表 (x,x)
- amazon-web-services - 为什么我在 AWS Cloudformation 上收到“YAMLException: bad indentation of a mapping entry”?
- java - Eclipse RAP 应用程序中的注销处理
- css - 如何制作按钮内容高亮动画?
- discord.py - 在 discord.py 嵌入中向下滚动
- angular - 在特定部门外键中显示员工
- sql - 如果它的类型是日期时间,我们如何添加 NULL 作为雪花上接受空值的字段的值
- javascript - 用户停止滚动延迟后如何移动导航栏(JavaScript)
- image - ValueError: 层序的输入 0 与层不兼容