我有一个集合,其键是字符串和List类型字符串我想从这个集合和列表中创建一个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();
}
首先我遍历集合,对于每个键,我得到已排序的位置,在排序的位置,我为每个类别选择前5个位置,最后我把它放在地图中,其中键是类别,值是该类别中排名前5位的名单。
我需要为集合上的每次迭代清除topPlaces列表,因为我不想让一个类别中的位置出现在另一个类别中,但是一旦我将列表放在map(finalPlaces)中并清除列表它也清除地图值。
如何在不清除地图值的情况下清除列表。
由于
答案 0 :(得分:2)
topPlaces
是对Object的引用,而不是基元。因此,如果将其存储在地图中,则会有两个对同一个对象的引用,一个在Map内部,一个在外部。如果你擦一个,你擦拭它们。
如果要在不删除存储列表的情况下清除topPlaces
,则需要先将其复制,然后再将其添加到地图中。
这样的事情:
finalPlaces.put(entry.getKey(), new ArrayList<String(topPlaces));