可以说我有一个ToFilter对象的列表,如下所示:

private class ToFilter {
    String option1;
    String option2;
}

使用Java流,我想过滤掉所有其他对象的选项2中不包含选项1的所有元素。因此,例如,如果有4个ToFilter实例,它们具有:
option1 = C,
option2 = A

option1 = C,
option2 = F

option1 = A,
option2 = B

option1 = A,
option2 = D

C应该被过滤并包含在结果集中,因为C在option1中有条目,但在任何其他对象的option2中都没有条目。类似于nonematch(),但实际上返回的是ToFilter对象的列表,而不仅仅是布尔布尔值。

最佳答案

我将使用两个流,创建一组所有option2值,并根据它们检查集合中的option1值:

List<ToFilter> list = ...;

Set<String> option2Set = list.stream()
        .map(ToFilter::getOption2)
        .collect(Collectors.toSet());

List<ToFilter> filtered = list.stream()
        .filter(f -> !option2Set.contains(f.getOption1()))
        .collect(Collectors.toList());

09-15 18:18