【发布时间】:2020-07-01 00:59:54
【问题描述】:
鉴于List<TypeA> 中的所有TypeA 实例在superTypeB 字段中设置了SubTypeB 实例,我需要从列表中过滤掉重复的TypeA 实例,其中重复表示@987654327 的值@ 和来自SubTypeB 的propertyB 都匹配。有没有办法用 Java 8 流 API 做到这一点?
public class TypeA {
private SuperTypeB superTypeB;
public SuperTypeB getSuperTypeB(){ return superTypeB; }
}
public class SuperTypeB {
private String propertyX;
}
public class SubTypeB extends SuperTypeB {
private String propertyA;
private String propertyB;
public String getPropertyA(){ return propertyA; }
public String getPropertyB(){ return propertyB; }
}
【问题讨论】:
-
这能回答你的问题吗? Java 8 Distinct by property
-
不完全。我从
SubTypeB的列表中找到了一个自定义distinctByKeys过滤谓词函数here,它可以过滤我上面定义的重复项(propertyA和SubTypeB匹配的propertyB)。我的问题是使用 TypeA 的superTypeB属性上的谓词函数返回过滤后的TypeA列表。 -
@skidalgo,为了清楚起见,假设您在列表中有三个项目,A、B、C。 A 和 B 是重复的,其中 C 是不同的。你的算法应该返回什么?
-
你在
filter之后还有一个Stream<TypeA>,所以你只需要将collect变成List<TypeA>。 -
@RajanPrasad 它应该返回原始列表中每个不同对象的第一次出现。
标签: java filter java-8 java-stream