如果我们有包含州和城市对的输入文件,则可以有多个属于同一州的城市。我们要做的是,我们必须将单一的国家作为关键,将属于该州的城市作为价值。
例如,我正在从文件中读取以下数据:
Maharashtra - Pune
Madhyapradesh - Bhopal
Maharashtra - Mumbai
Maharashtra - Nagpur
马哈拉施特拉邦将成为一个关键,浦那,孟买和那格浦成为价值观。我做的是首先将数据拆分为州和城市。我现在正试图将状态存储在列表中,然后检查列表但我被卡住了。
我如何将马哈拉施特拉邦作为关键,将浦那,孟买和那格浦尔作为其各自的价值观?像这样:
Maharashtra- Pune, Mumbai, Nagpur.
这是我到目前为止所做的:
public class DataManagerImpl implements DataManager {
@Override
public Map<String, List<String>> populateCityDataMap(String fileName)
throws FileNotFoundException {
// TODO Auto-generated method stub
Map<String, List<String>> map = new HashMap<String, List<String>>();
List<String> valSetOne = new ArrayList<String>();
List<String> list=null;
String nameAndRollNumber=null;
String[] nameAndRollNumbers =null;
String State=null;
Scanner s = null;
try {
s = new Scanner(new File("F:\\Participant_Workspace\\Q4\\CityStateLocator\\StateCityDetails.txt"));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
while (s.hasNext()) {
nameAndRollNumber = s.nextLine();
nameAndRollNumbers = nameAndRollNumber.split("-");
State = nameAndRollNumbers[0];
String City=nameAndRollNumbers[1];
/*System.out.println(valSetOne);
map.put(State,valSetOne);*/
System.out.println(State+" "+City);
list.add(State);
}
/*Iterator<String> CrunchifyIterator = list.iterator();
while (CrunchifyIterator.hasNext()) {
System.out.println(CrunchifyIterator.next());
}*/
System.out.println(list);
return null;
}
}
答案 0 :(得分:2)
你需要像key这样的地图(作为一个字符串)和值作为城市列表(即字符串列表)。所以你的数据结构应该是这样的:
Map<String, List<String>> map ...
List<String> cities = map.get(state);
if (cities == null) {
cities = new ArrayList<String>();
map.put(state, cities);
}
cities.add(city);