如果我们想要多个值的单个键

时间:2015-06-30 10:34:24

标签: java collections

如果我们有包含州和城市对的输入文件,则可以有多个属于同一州的城市。我们要做的是,我们必须将单一的国家作为关键,将属于该州的城市作为价值。

例如,我正在从文件中读取以下数据:

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;
    }   
}   

1 个答案:

答案 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);