如何使用列表作为值从地图获取密钥

时间:2015-05-30 12:44:01

标签: java list dictionary

我使用Java集合制作类似标签的东西。我使用list作为值制作了一个地图。

我可以通过列表中的单词进行密钥搜索吗?我怎么能这样做?

Map<String, List<String>> map = new HashMap<String, List<String>>();    
List<String> list1 = new ArrayList<String>();
List<String> list2 = new ArrayList<String>();

list1.add("mammal");
list1.add("cute");

list2.add("mammal");
list2.add("big");

map.put("cat", list1);
map.put("dog", list2);

4 个答案:

答案 0 :(得分:3)

for (Entry<String, List<String>> entry : map.entrySet()) {
    if (entry.getValue().contains(animalYouSearch)) {
        System.out.println(animalYouSearch + " is in " + entry.getKey());
    }
}

如果您搜索&#34;哺乳动物&#34;

,则输出
  

哺乳动物在猫中

     

哺乳动物在狗身上

答案 1 :(得分:3)

如果我理解正确,你想获得给定列表中的一个值作为相应值存储的密钥?当然,您始终可以使用values()接口的Map方法获取所有这些列表,然后迭代这些列表。但是,如何使用第二个映射将标记用作键并存储带有此标记的所有条目的列表?对于大型数据集,这可能会表现得更好。

答案 2 :(得分:0)

没有魔法&#39;为此,您需要在值内搜索,然后报告正确的密钥。

例如:

round_half_even(numeric,integer)

但您可能希望以其他方式存储您的数据,以及&#34;功能列表&#34;作为关键,以及动物名称的价值。

答案 3 :(得分:0)

如果要检索标记集,请使用以下方法:

public Set<String> findMatchingKeys(Map<String, List<String>> map, String word){
        Set<String> tags = new HashSet<String>();
        for(Map.Entry<String,List<String> > mapEntry : map.entrySet()){
            if(mapEntry.getValue().contains(word))
                tags.add(mapEntry.getKey());
        }
        return tags;
    }