Java 将集合和列表合并到HashMap

Java 将集合和列表合并到HashMap,java,list,arraylist,hashmap,set,Java,List,Arraylist,Hashmap,Set,我有一个集合,它的键是String和List类型的String,我想用这个集合和列表制作一个HashMap。集合包含类别,列表包含属于这些类别的位置。下面是我试过的 Set<Entry<String, Integer>> setUserPreferences = sortedUserPreferences.entrySet(); Map<String , Integer> sortedPlaces = new HashMap<String, Intege

我有一个集合,它的键是String和List类型的String,我想用这个集合和列表制作一个HashMap。集合包含类别,列表包含属于这些类别的位置。下面是我试过的

Set<Entry<String, Integer>> setUserPreferences = sortedUserPreferences.entrySet();
Map<String , Integer> sortedPlaces = new HashMap<String, Integer>();
List<String> topPlaces = new ArrayList<String>();
Map<String , List<String>> finalPlaces = new HashMap<String, List<String>>();
for (Entry<String, Integer> entry : setUserPreferences) {
        sortedPlaces = placesService.sortPlaces(categorisedPlaces.get(entry.getKey()));
        int counter = 0;
        for (Map.Entry<String, Integer> sortedplace : sortedPlaces.entrySet()) {
            topPlaces.add(sortedplace.getKey());
            counter++;
            if(counter == 5){
                sortedPlaces.clear();
                break;
            }       
        }
        finalPlaces.put(entry.getKey(), topPlaces);
        topPlaces.clear();
    }
Set setUserPreferences=sortedUserReferences.entrySet();
Map sortedPlaces=新HashMap();
List-topPlaces=new-ArrayList();
Map finalPlaces=新的HashMap();
for(条目:setUserPreferences){
sortedPlaces=placesService.sortPlaces(categorisedPlaces.get(entry.getKey());
int计数器=0;
对于(Map.Entry sortedplace:sortedPlaces.entrySet()){
add(sortedplace.getKey());
计数器++;
如果(计数器==5){
已分类的位置。清除();
打破
}       
}
finalPlaces.put(entry.getKey(),topPlaces);
topPlaces.clear();
}
首先,我迭代集合,对于每个关键点,我得到排序的位置,从排序的位置中,我为每个类别选择前5个位置,最后我将其放在地图中,其中关键点是类别,值是该类别中前5个位置的列表

我需要清除集合中每个迭代的topPlaces列表,因为我不想让一个类别中的位置出现在另一个类别中,但一旦我将列表放入map(finalPlaces)并清除列表,它也会清除贴图值

如何在不清除映射值的情况下清除列表


谢谢

topPlaces
是对对象的引用,而不是原语。因此,如果将其存储在地图中,则对同一对象有两个引用,一个在地图内部,一个在地图外部。如果你擦一个,你就擦两个

如果要在不删除存储列表的情况下清除
topPlaces
,则需要在将其添加到地图之前复制该列表

大概是这样的:

finalPlaces.put(entry.getKey(), new ArrayList<String(topPlaces));

finalPlaces.put(entry.getKey(),新建ArrayListsure只需等待8分钟:)@UmairIqbal Woha,不知道D:对不起