我不知道我的bug在哪里,我得到的是一个包含以下值的字符串数组,逐行:
San Jose -> San Francisco
San Jose -> Anchorage
New York -> Anchorage
New York -> San Jose
New York -> San Francisco
New York -> Honolulu
Anchorage -> New York
Anchorage -> San Jose
Honolulu -> New York
Honolulu -> San Francisco
Denver -> San Jose
San Francisco -> New York
San Francisco -> Honolulu
San Francisco -> Denver
我想将这些值放在HashMap中,使用右边的字符串作为键,并将值设置为ArrayList,这样如果我要求'San Jose'的目的地,它将遍历列表并且返回'旧金山'和'安克雷奇'。我还没有设法使Key-Value关系正常工作。该方法运行完毕的原因。对于任何一个城市来说,价值将是最后一次迭代,(旧金山)返回纽约,檀香山和丹佛的所有钥匙。
private void createDataBase()
{
ArrayList<String> tempValues = new ArrayList <String>();
for (int i = 0; i < database.size();i++)
{
String line = database.get(i);
//String value = "";
if (line.length() > 1)
{
int keyStart = 0;
int keyEnd = line.indexOf("-");
int valueStart = keyEnd+3;
int valueEnd = line.length();
String key = line.substring(keyStart, keyEnd);
String value = line.substring(valueStart, valueEnd);
tempValues.add(value);
System.out.println(keyValueDatabase.toString());
keyValueDatabase.put(key, tempValues);
}
else
{
tempValues.clear();
}
}
System.out.println(keyValueDatabase.toString());
}
答案 0 :(得分:1)
除非您无法使用外部库,否则您可能需要考虑MultiValueMap
答案 1 :(得分:1)
这是另一个要看它的值:
我猜你可以检查“keyValueDatabase”地图以查看该键是否已经存在于地图中,如果它不存在,则添加一个新列表作为值,如果它确实抓住了列表并再添加一个项目。
private void createDataBase()
{
for (int i = 0; i < database.size();i++)
{
String line = database.get(i);
//String value = "";
if (line.length() > 1)
{
int keyStart = 0;
int keyEnd = line.indexOf("-");
int valueStart = keyEnd+3;
int valueEnd = line.length();
String key = line.substring(keyStart, keyEnd);
String value = line.substring(valueStart, valueEnd);
tempValues.add(value);
System.out.println(keyValueDatabase.toString());
//Check if the map already contains an entry for the key
if(keyValueDatabase.containsKey(key))
{
//If yes, grab the value and add one to the list
ArrayList<String> tempValues = keyValueDatabase.get(key);
tempValues.add(value); //this should get updated in the same list due to reference
}
else
{ ArrayList<String> tempValues = new ArrayList <String>();
tempValues.add(value);
keyValueDatabase.put(key, tempValues);
}
}
}
System.out.println(keyValueDatabase.toString());
}
答案 2 :(得分:0)
这段代码错了:
tempValues.add(value);
System.out.println(keyValueDatabase.toString());
keyValueDatabase.put(key, tempValues);
而不是以上,你需要做这样的事情:
List<String> values = keyValueDatabase.get(key);
if (values == null) {
values = new ArrayList <String>();
keyValueDatabase.put(key, values);
}
values.add(value);
...并删除tempValues
。