可以说我有一个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());