使用 Java 流过滤器获取一个列表中不属于另一个列表的对象列表

Fetch list of objects in one list that are not part of another list using Java stream filter

我有 2 个合集,如下所示

List<TestSVM> listOne = new ArrayList<TestSVM>();
// TODO: Add sample data to listOne.
listOne.add(new TestSVM("nameA", "school1"));
listOne.add(new TestSVM("nameC", "school2"));
listOne.add(new TestSVM("nameB", "school3"));

List<TestSVM> listTwo = new ArrayList<TestSVM>();
listTwo.add(new TestSVM("nameA", "school1"));
listTwo.add(new TestSVM("nameC", "school2"));

我需要使用 Java 流过滤器从 listOne 中获取在 listTwo[= 中没有匹配学校名称的对象列表30=]。在这种情况下,结果应该是大小为 1 的列表,其中包含 object

("nameB", "school3")

我使用了这个过滤语句,但没有得到预期的结果。结果,我得到了整个 listOne

List<TestSVM> results = listOne.stream().filter(one-> listTwo.stream()
              .anyMatch(two -> !two.getSchool().equals(one.getSchool()))) 
              .collect(Collectors.toList());

不过我也观察到,当listTwo的size为1(仅)时,结果如预期,只是得到了[=24=中的对象列表]listOne 不属于 listTwo

请帮助实现相同的 Streams 过滤器语句。

否定应该在 filter 内,因为 anyMatch returns 如果至少找到一个匹配项则为真

List<TestSVM> results = listOne.stream().filter(one-> !listTwo.stream()
          .anyMatch(two -> two.getSchool().equals(one.getSchool()))) 
          .collect(Collectors.toList());