映射2个属性

时间:2015-04-16 06:50:32

标签: java hashmap mapping

我有2个属性的列表,即实体和应用程序。几个实体可以是一个应用程序的一部分。现在,我想将具有相同应用程序的所有实体映射到一个应用程序列表。为此我已声明HashMap <String, List <String>>

在遍历实体列表时,我希望将它们逐个添加到应用程序列表中。 在c ++中我可以使用一个地图,其中m [appName]将给出链接列表标题并使用我可以添加到现有列表。在hashmap中我需要输入(key,value)对,但是如何添加到应用程序的现有实体列表中呢?

2 个答案:

答案 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并插入它。