2个属性的映射
Mapping of 2 attributes
我有一个包含 2 个属性的列表,即实体和应用程序。多个实体可以是一个应用程序的一部分。现在,我想将具有相同应用程序的所有实体映射到一个应用程序列表。为此,我声明 HashMap <String, List <String>>
在遍历实体列表时,我希望将它们一一添加到应用程序列表中。
在 c++ 中,我可以使用一个映射,其中 m[appName] 会给出 link 列表 header 并使用它我可以添加到现有列表中。在 hashmap 中,我需要输入 (key, value) 对,但是如何添加到应用程序的现有实体列表中?
据我了解应该是这样
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
来强制应用程序中条目的唯一性。如果不是您的 case/you,则不需要它 - List
很好,而且可能工作得更快。
另请注意,放置在 HashSet
中的真实对象应该有正确的 hashCode()
/equals()
实现。请参阅 http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#hashCode()
事实证明,我使用了 Hashmap 的 get 方法来达到我的目的。我是这样使用的:
m.get(key).add(value)
'key' 中只有 appName 和值是实体 ID。唯一需要注意的是,对于第一次插入,我必须进行空值检查,如果我发现 'get' 返回空值,我会创建一个自己的列表并将其插入。
我有一个包含 2 个属性的列表,即实体和应用程序。多个实体可以是一个应用程序的一部分。现在,我想将具有相同应用程序的所有实体映射到一个应用程序列表。为此,我声明 HashMap <String, List <String>>
在遍历实体列表时,我希望将它们一一添加到应用程序列表中。 在 c++ 中,我可以使用一个映射,其中 m[appName] 会给出 link 列表 header 并使用它我可以添加到现有列表中。在 hashmap 中,我需要输入 (key, value) 对,但是如何添加到应用程序的现有实体列表中?
据我了解应该是这样
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
来强制应用程序中条目的唯一性。如果不是您的 case/you,则不需要它 - List
很好,而且可能工作得更快。
另请注意,放置在 HashSet
中的真实对象应该有正确的 hashCode()
/equals()
实现。请参阅 http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#hashCode()
事实证明,我使用了 Hashmap 的 get 方法来达到我的目的。我是这样使用的:
m.get(key).add(value)
'key' 中只有 appName 和值是实体 ID。唯一需要注意的是,对于第一次插入,我必须进行空值检查,如果我发现 'get' 返回空值,我会创建一个自己的列表并将其插入。