我有java.util.Set<City> cities
,我需要通过两种方式将城市添加到此集:
添加个别城市(借助cities.add(city)
方法调用)
在此套装中添加另一组城市(借助cities.addAll(anotherCitiesSet)
方法调用)
但第二种方法的问题是我不知道anotherCitiesSet
中是否有任何重复的城市。
我想在尝试在cities
集中输入重复条目时进行一些处理。
答案 0 :(得分:10)
复制cities
集(比如citiesCopy
),然后调用citiesCopy.retainAll(anotherCitiesSet)
- citiesCopy
中的结果集将包含两个集的交集,因此允许您轻松查看哪些城市是重复的,如果有的话。
或者,遍历第二组并手动添加每个元素,每次检查add()
的返回值:
for(java.util.Set<City> c : anotherCitiesSet) {
if(!cities.add(c)) {
// c was a duplicate, do something?
}
}
答案 1 :(得分:2)
从java.util.Set派生一个类,如果可能,覆盖addAll(如果可能,创建新方法)并逐个添加项目,并在检测到重复条目时进行自定义处理。
答案 2 :(得分:1)
在致电addAll
之前,您需要检查重复项:
Set<City> cities = getCities();
Set<City> otherCities = getOtherSetOfCities();
Set<City> duplicates = new HashSet<City>(otherCities);
duplicates.retainAll(cities);
// now duplicates contains all City objects that are in otherCities and cities
答案 3 :(得分:1)
是你的城市只是字符串(这是对象) 或者它是包含其他东西的对象?
如果是String,那么我猜上面的答案就可以了。
如果是包含以下内容的对象:String name,int population等... 并且您只想比较String name以删除重复项,然后您可以使用{HashSet}类并覆盖其(HashCode)和(equals)方法。
因为你可能有两个城市:纽约市和另一个纽约市。包含相同的信息。但因为它们是堆中的两个对象。他们会有不同的HashCode。也就是说,你的HashSet将保留它们。 HashSet检查HashCode和含义equals()。
解决方案是覆盖两种方法:
Auth Id Application Appl. Application Id DB # of
Name Handle Name Agents
-------- -------------- ---------- -------------------------------------------------------------- -------- -----
DB2TEST python 47 127.0.0.1.34218.180529224354 SAMPLE 1
答案 4 :(得分:0)
在cities.addAll()
之前:
Set<City> intersection = new HashSet<City>(cities);
cities.retainAll(anotherCitiesSet);
// Process all the items in the intersection, these are your duplicates
...
cities.addAll(anotherCitiesSet);
答案 5 :(得分:0)
我认为最优雅的解决方案是使用java.util.Set
的实现,
例如java.util.HashSet
。
例如,以下代码将集合d
中的所有整数添加到集合c
中,
未添加重复项。
import java.util.HashSet;
import java.util.LinkedList;
import com.google.common.base.Joiner;
public class CollectionsTest {
public static void main(String[] args) {
HashSet<Integer> c = new HashSet<>();
c.add(0);
c.add(1);
c.add(2);
HashSet<Integer> d = new HashSet<>();
d.add(2);
d.add(3);
System.out.println("c = " + Joiner.on(", ").join(c));
System.out.println("d = " + Joiner.on(", ").join(d));
c.addAll(d);
System.out.println("c.addAll(d) = " + Joiner.on(", ").join(c));
}
}
c = 0, 1, 2
d = 2, 3
c.addAll(d) = 0, 1, 2, 3
为了让HashSet
能够正常使用City
个对象,
City
异议应覆盖hashCode()
和equals()
方法。
然后HashSet
会在免费使用addAll()
时删除重复项!