在嵌套的HashMap中搜索String Array项

时间:2014-05-24 06:47:48

标签: java hashmap arrays

我有一个嵌套的HashMap(outer_map),里面有另一个HashMap作为值(inner_map),实现为

Map<String, HashMap<String, String>> outer_map = new HashMap<String, HashMap<String, String>>();
Map<String, String> inner_map = new HashMap<String, String>();

下图说明了地图的整体结构: enter image description here 长话短说,我需要通过 String Array outer_map的vlaue(inner_map)中的值>项目,然后生成另一个 字符串数组 以添加匹配的项目。

  

如果 字符串数组 的元素与 inner_map 的随机元素相同(例如; value2 value1 value7 )值,我该如何搜索并比较这些项目以添加到另一个 字符串数组

我尝试过的最新代码段,但我无法取得成功:

if( !( theStringArray.equals("") ) )
{
    while( outer_map.keySet().iterator().hasNext() )
    {
       for( int i=0; i <= theStringArray.length; i++) 
       {
           // outer_map keys are order as 1,2,3,..,8
           theStringArray[i] = outer_map.get(String.valueOf(i+1)).get("key1");
           ...
       }
    }
}

EDIT :地图生成功能

private void parse(String in) throws IOException
{
    reader = new JsonReader(new StringReader(in));
    ...
    int nodeCounter = 1;
    while(reader.hasNext())
    {    
        ...
            String nameAsKey1 = "blabla"; // value1
            inner_map.put("name", nameAsKey1);

            String surnameAsKey2 = "blabla"; // value2
            inner_map.put("surname", surnameAsKey2);
             ...

        outer_map.put(String.valueOf(nodeCounter), (HashMap<String, String>) inner_map);
        inner_map = new HashMap<String, String>();
        nodeCounter++;
    }   
}

EDIT :我不知道如何更清楚地解释这个问题,但这可能有助于理解它:地图结构

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:1)

我假设你有一个String数组和一个map map。现在,您想要针对String数组搜索内部映射的值字段,并且如果创建一个具有匹配值的新字符串数组。

如果是这种情况,以下程序将帮助您..

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

public class InnerMapSearch {

    public static void main(String[] args) {
        Map<String, HashMap<String, String>> outer_map = new HashMap<String, HashMap<String, String>>();
        Map<String, String> inner_map = new HashMap<String, String>();

        String[] searchParams = {"blabla1", "blabla3", "blabla20"};

        //Populating the map
        int reader = 1;
        while (reader < 10) {
            String nameAsKey1 = "blabla" + reader; // value1
            inner_map.put("name", nameAsKey1);

            String surnameAsKey2 = "blabla" + reader; // value2
            inner_map.put("surname", surnameAsKey2);

            outer_map.put(String.valueOf(reader), (HashMap<String, String>) inner_map);
            inner_map = new HashMap<String, String>();
            reader++;
        }

        //Searching
        Set<String> searchResults = new HashSet<String>(); // Using set to avoid duplicate

        // Iterate over the outer map
        for(String key : outer_map.keySet()){
            // Iterate through each inner_map value of outer map
            for(Entry<String, String> innerEntry : outer_map.get(key).entrySet()){
                // Iterate through the list of search params and see if its present in inner_hashmap
                for(String searchParam : searchParams){
                    if(searchParam.equals(innerEntry.getValue())){
                        // The search parameter is in inner map so adding to result.
                        searchResults.add(searchParam);
                    }
                }
            }
        }

        // Converting the list to an array.
        String[] searchResultsArray = searchResults.toArray(new String[searchResults.size()]);
    }

}