合并两个没有重复的列表

时间:2013-09-04 14:32:27

标签: java list duplicates contains

我目前正在尝试合并两个列表,同时删除其中的重复值。但是,在执行此操作时,添加每个工作站并假设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());
        }   
    }

2 个答案:

答案 0 :(得分:3)

使用Set实现可以实现集合中元素的唯一性。你应该使用它。首先迭代第一个列表的元素并将它们添加到集合中。然后对第二个列表重复相同的过程。已经完成了。

答案 1 :(得分:1)

为了让contains返回true,必须在equals课程中覆盖Station以进行正确的检查,否则呼叫将达到{{1}通过引用进行比较的实现。

如果您想继续使用Object,请检查您的List实施。如果equals地图的每个条目上没有多个工作站,我建议您切换到默认情况下处理对象唯一性的overview。您仍然需要为Set艰难提供有效的实施。