我有2个属性的列表,即实体和应用程序。几个实体可以是一个应用程序的一部分。现在,我想将具有相同应用程序的所有实体映射到一个应用程序列表。为此我已声明HashMap <String, List <String>>
在遍历实体列表时,我希望将它们逐个添加到应用程序列表中。 在c ++中我可以使用一个地图,其中m [appName]将给出链接列表标题并使用我可以添加到现有列表。在hashmap中我需要输入(key,value)对,但是如何添加到应用程序的现有实体列表中呢?
答案 0 :(得分:0)
根据我的理解,就像那样
public class MapAdder {
private Map<String, Set<String>> app2entryMap = new HashMap<>();
...
public boolean addMapping(final String app, final String entry) {
Set<String> entries = app2entryMap.get(app);
if (entries == null) {
entries = new HashSet<String>();
app2entryMap.put(app, entries);
}
return entries.add(entry);
}
}
请注意,我使用Set
代替List
来强制应用中条目的唯一性。如果它不是你的情况/你不需要它 - List
很好,可能会更快。
另请注意,hashCode()
等放置的真实对象应该有正确的equals()
/ HashSet
实现。请参阅http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#hashCode()
答案 1 :(得分:0)
事实证明,为了我的目的,我使用了Hashmap的get方法。我这样用过:
m.get(key).add(value)
其中'key'只是appName,而value是实体id。唯一需要注意的是,对于第一次插入,我必须进行空检查,如果我发现'get'返回null,我创建了一个自己的List并插入它。