首页 > 解决方案 > 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 流来做到这一点?或其他方式?

标签: java

解决方案


您应该为您的 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;
  }

推荐阅读