我目前正在尝试合并两个列表,同时删除其中的重复值。但是,在执行此操作时,添加每个工作站并假设mapValue List不包含任何工作站,即使它显然也是如此(我最终会有很多重复)。我究竟做错了什么?
Map<String, List<Stations>> overview = new TreeMap<String, List<Stations>>();
for(Trains train: trainOverview){
List<Stations> mapValue = overview.get(train.getTrainNumber());
//Merge lists if the key already exists, and replace the old value with the merged list
if(overview.containsKey(train.getTrainNumber())){
for(Stations station: train.getStations()){
if(!mapValue.contains(station)) mapValue.add(station);
}
overview.put(train.getTrainNumber(), mapValue);
}
//If no key exists, create a new entry
else{
overview.put(train.getTrainNumber(), train.getStations());
}
}
答案 0 :(得分:3)
使用Set
实现可以实现集合中元素的唯一性。你应该使用它。首先迭代第一个列表的元素并将它们添加到集合中。然后对第二个列表重复相同的过程。已经完成了。
答案 1 :(得分:1)
为了让contains
返回true
,必须在equals
课程中覆盖Station
以进行正确的检查,否则呼叫将达到{{1}通过引用进行比较的实现。
如果您想继续使用Object
,请检查您的List
实施。如果equals
地图的每个条目上没有多个工作站,我建议您切换到默认情况下处理对象唯一性的overview
。您仍然需要为Set
艰难提供有效的实施。