大家好,我看过这个,当你有两组数据时,如何实现并集和交集,也就是strings.how,当我的数据集包含对象时,我能做同样的事情吗?,我只想得到每个对象的一个属性的并集?
发布于 2012-12-20 17:35:16
,但是我想以某种方式覆盖它们,这样它就不会添加一个对象,如果我的集合中已经有一个对象,在选定的property.If中有相同的值,我不太清楚,告诉我,这样我就可以写一个例子。
我认为最好的方法是使用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);发布于 2012-12-20 17:24:44
Google Guava有包含这些方法和更多方法的集合类。
发布于 2012-12-20 17:17:07
交集使用的是contains,它使用的是equals。你应该在你想做交集的类上实现equals()方法。
我没有找到关于set.addAll()实现的具体注释,但它很可能还使用equals()来确定对象是否已经在集合中。
如果你想只比较一个字段,你的equals()应该只比较这个字段。
https://stackoverflow.com/questions/13968563
复制相似问题