class Object {
string name;
Time date;
string createdBy;
int version;
}如何合并两组对象,并要求如果来自Set1的对象具有匹配的name和version作为来自Set2的对象,则只将来自Set2的对象保留在合并后的集合中。
例如。
Set1:{ Object1(name:wilson, date:00:00:00, createdBy:admin, version:1), Object2(name:wilson, date:00:00:00, createdBy:admin, version:2) }
Set2:{ Object3(name:arizona, date:00:00:00, createdBy:user, version:5), Object4(name:wilson, date:00:00:00, createdBy:user, version:1) }
使用合并后的集合:{ Object4(name:wilson, date:00:00:00, createdBy:user, version:1), Object2(name:wilson, date:00:00:00, createdBy:admin, version:2), Object3(name:arizona, date:00:00:00, createdBy:user, version:5), } (顺序并不重要)
我可以将这两个集合合并,但我不确定如何利用Java 8 streams来添加此过滤条件
发布于 2020-11-11 15:31:41
如果您认为您的对象是相等的,如果名称和版本相同,那么您可以将其定义为您的相等性测试(即在您的类中覆盖equals和hashcode )。
如果您已经将该条件定义为等于,那么将集合存储在一个集合中就很简单了:
Set<Object> mergedSet = new HashSet(set2);
mergedSet.addAll(set1);请注意,我首先添加了set2,以便那里的对象具有优先权。
如果这是一种特殊情况,并且通常不能代表相等的对象,则:
Set<Object> mergedSet = new HashSet(set2);
set1.stream()
.filter(o1 -> set2.stream()
.noneMatch(o2 -> o1.name.equals(o2.name) && o1.version == o2.version))
.forEach(mergedSet::add);https://stackoverflow.com/questions/64781362
复制相似问题