嗨,我已经看到这个post如何实现联合和交集,当你有两组数据,那就是strings.how我可以做当我的集合包含对象时也是如此,并且我想要获得每个对象只有一个属性的联合?我该如何实现联合和集合论与对象集的交集
回答
但我想以某种方式重写它们,以便它不会添加一个对象,如果有一个对象已经在我的集合中具有相同的值在选定的属性。如果我不够清楚告诉我,所以我可以写一个例子。
我认为最好的方法是使用ConcurrentMap。
ConcurrentMap<String, MyType> map = new ConcurrentHashMap<>();
// the collection to retain.
for(MyType mt: retainedSet) map.put(mt.getKey(), mt);
// the collection to keep if not duplicated
for(MyType mt: onlyIfNewSet) map.putIfAbsent(mt.getKey(), mt);
// to get the intersection.
Set<String> toKeep = new HashSet<>();
for(MyType mt: onlyIfNewSet) toKeep.add(mt.getKey());
// keep only the keys which match.
map.keySet().retainAll(toKeep);
好吧,它看起来不错,谢谢,但我很抱歉无法弄清楚这是如何工作。我的意思是我猜我的MyType是我的自定义对象,但我怎么能选择基于在什么领域应该进行联合和结合? – user1746708
“MyType”是您的自定义类型,“getKey()”是您想要键入的字段。 –
好的,谢谢我会试试看,并回复你 – user1746708
交叉点使用contains,它使用equals。您应该在要交叉的课程上实施equals()
方法。
我没有找到关于set.addAll()
实现的具体评论,但很可能它也使用equals()
来确定对象是否已经在该集合上。
如果你只想通过一个字段进行比较,你的equals()只应该比较这个字段。
好吧,我认为这是这样的事情,但你看我现在对工会一方更感兴趣。你确定我应该再次重写equals()? – user1746708
Java总是使用equals()来查看对象是否等于,并且addAll()规范说它执行union(http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Collection的.html#中的addAll%28java.util.Collection%29)。我没有看到任何理由考虑一个不同的行为 – dgmora
与this answer一样,使用Collection方法retainAll(Collection)
- intersection和#addAll(Collection)
- union。
由于这些方法使用equals,所以还必须重写Class中的equals
方法并实现基于一个属性的比较。
如果它是简单的对比,这里是一个例子(由我的想法产生):
public class Main {
private Integer age;
...
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Main main = (Main) o;
if (age != null ? !age.equals(main.age) : main.age != null) return false;
return true;
}
好吧我有这样的想法,但我怎么能正确覆盖equals()? – user1746708
我用一个例子更新了答案。如果你想深入了解'equals',[这里是一个很好的答案](http://stackoverflow.com/a/27609/760484)。 – tadaskay
好的,谢谢我会试试看,并回复给你 – user1746708
谷歌番石榴,具有集类,它包含这些方法等等。
- 1. 实现和集合
- 2. 问题:如何验证对象集合中的对象集合
- 3. 如何访问不仅与另一个对象关联的对象集合,还访问其他对象集合关联的对象集合?
- 4. 集合的交集
- 5. 面向对象设计 - 首先应该将类集合/封装集合实现集合/ IEnumerable接口吗?
- 6. 对象集合
- 7. 对象集合
- 8. 我该如何展平一个对象集合(又包含集合)?
- 9. 集合与对象的反应如何?
- 10. 如何使用集合操作删除实体集合中与视图模型集合匹配的对象?
- 11. 在php中实现集合论操作
- 12. 骨干集合 - 如何过滤与其他集合的集合?
- 13. 击:集合论
- 14. Java对象实现Runnable,如何从集合中删除对象
- 15. 与集合实现接口和泛型
- 16. 泛型和集合...与实现挣扎
- 17. PowerShell中的联合和交集?
- 18. 如何绑定到集合集合下的对象的属性?
- 19. Zoomable和Panable对象集合
- 20. ObjectDataSource和对象集合
- 21. 如何查找集合的交集
- 22. 交集与扭曲的集合Java
- 23. 集合与子集合
- 24. 与集合转换集合
- 25. 我想从更大的集合中创建对象的集合
- 26. 基于并集和交集合并两个json数组对象
- 27. 裹集合对象
- 28. C++对象集合
- 29. 如何使用对象和集合
- 30. CollectionsUtils使用对象元素集合过滤对象的集合
“sets contains objects”:'o'bjects or'O'bjects? –
你的意思是喜欢用'retainAll'(intersection)还是'addAll'(union)? –
@Peter Lawrey完全是这两个方法。但我想以某种方式覆盖它们,以便它不会添加一个对象,如果有一个对象已经在我的集合中具有相同的值在选定的属性。如果我不够清楚告诉我可以写一个例子。 – user1746708