用Java填充Hashmap

时间:2015-04-25 08:07:09

标签: java hashmap

好的我有很多问题。我想用一组String关键字填充我的哈希映射。基本上,用户输入一个关键字,如果它与哈希映射中的关键字匹配,则调用parseFile方法。否则,如果用户输入是关键字的同义词,我在哈希映射中搜索原始关键字。但我的问题是填充哈希映射。谁能引导我朝着正确的方向前进?

 public static void main(String[] args) throws FileNotFoundException {

    /* your synonym map of keywords and you have to populate 
    it before the user can give values.*/ 
    HashMap<String, String[]> synonymMap = new HashMap<String, String[]>();
    populateSynonymMap(); //populate the map


    /*Get user response*/ 
    System.out.println("What would you like to know?");
    System.out.print("> ");
    Scanner scanner = new Scanner(System.in);
    String input = scanner.nextLine().toLowerCase();

    /*first check if the input already is the original one*/
    if (synonymMap.containsKey(input)) {
        parseFile(input);
    } else {
        /*if not then search the synonymMap to get the original keyword*/
        for (Map.Entry<String,String[]> entry : synonymMap.entrySet()) {

            String[] value = entry.getValue();                
            if (Arrays.asList(value).contains(input)) {
                parseFile(entry.getKey());
                break;
            }
        }
    }

}

3 个答案:

答案 0 :(得分:3)

可能是您可以尝试以下代码。这就是你想要完成的事情。但我认为您需要考虑重新设计您查找关键字同义词的方式。

如果你面临的问题只是填充hashmap,那可能是因为你在main方法中定义了map,然后没有在其他任何地方填充它。

因此,对于第二个选项,您可以在主要方法中更改分配,例如..

    synonymMap = populateSynonymMap(); // populate the map

填充地图的示例方法。

private static HashMap<String, String[]> populateSynonymMap() {
    HashMap<String, String[]> synonymMap = new HashMap<String, String[]>();

    String s[] = new String[] { "x1", "x2", "x3" };
    String t[] = new String[] { "y1", "y2", "y3" };
    String u[] = new String[] { "z1", "z2", "z3" };

    synonymMap.put("x", s);
    synonymMap.put("y", t);
    synonymMap.put("z", u);

    return synonymMap;

}

答案 1 :(得分:0)

您必须定义一个接受Map来填充

的方法
public void populateSynonymMap(Map<String, String[]> synonymsMap)

或在类中声明您的Map属性,以便在方法中可见。

然后在inside方法中你必须有一个单词和同义词数组:

String word = "synonym";
String[] synonyms = "equivalent,methonim".split(",");

然后将两者都放在地图中:

synonimsMap.put(word, synonyms);

根据需要多次执行(如果很多,为单词定义2个数组,一个String[],为synonims定义另一个String[][],并迭代它们以更简单的方式填充地图。 ..

String[] words = // populate word array
String[][] synonims = // populate synonims 2d array

for (int c = 0; c < words.length; c++) {
    synonimsMap.put(words[c], synonyms[c]);
}

希望这足以引导你......

答案 2 :(得分:0)

而不是将HashMap声明为

HashMap<String, String[]> synonymMap = new HashMap<String, String[]>();

你为什么不声明是

HashMap<String, List<String>> synonymMap = new HashMap<String, ArrayList<String>>();

&安培;然后arrayListObj.add(entry.getValue());

然后它将消除对此Arrays.asList(value)

的需要

初始化方法,如

public void populateSynonymMap(String key, List<String> value){
    synonymMap.put(key, value);
    }

列表中的输入值

List<String> listOne=new ArrayList<String>();
listOne.add("Input String"); //Keep on adding the Strings in this way
//then call the populateSynonymMap method
//Say your key is A
populateSynonymMap("A", listOne);