2016-09-01 74 views
0

我曾经看到过很多关于散列表数据的例子,但我没有按需要获取数据。如何获得散列表数据

这里是我的代码:

HashMap<String,ArrayList<String>> citylist = new HashMap<String, ArrayList<String>>(); 

    ArrayList<String> Gujarat = new ArrayList<String>(); 
    Gujarat.add("Surat"); 
    Gujarat.add("Baroda"); 
    Gujarat.add("Ahmedabad"); 

    ArrayList<String> Rajasthan = new ArrayList<String>(); 
    Rajasthan.add("Udaipur"); 
    Rajasthan.add("Jaipur"); 

    ArrayList<String> UP= new ArrayList<String>(); 
    UP.add("Lucknow"); 
    UP.add("Agra"); 

    citylist.put("Gujarat", Gujarat); 
    citylist.put("UP", UP); 
    citylist.put("Rajasthan", Rajasthan); 

正是在recyclerview如何在BindViewHolder获取这种类型的数据? 敬酒来了,如:

{Rajasthan=[Udaipur, Jaipur], UP=[Lucknow, Agra], Gujarat=[Surat, Baroda, Ahmedabad]} 

我用这种方法来获得,但错误来了:

public void onBindViewHolder(MyViewHolder holder, int position) { 
    ArrayList<String> lst = citylist.get("" + position); 
    for (Integer i = 0; i < lst.size(); i++) { 
     holder.tv.setText(citylist.toString()); 
     Log.e("Hashmap....", ""+holder.tv); 
    } 

输出应该像古吉拉特邦是国家和苏拉特巴罗达和艾哈迈达巴德的城市?

+0

是这些静态或动态 –

+0

动态.. @奇拉格阿罗拉 – Abhi

+0

尽我的代码,我已经发布 –

回答

1

首先创建一个ArrayList与所有国家:

ArrayList<String> stateList = new ArrayList<String>(); 
stateList.add("Gujarat"); 
stateList.add("UP"); 
stateList.add("Rajasthan"); 

二创建一个HashMap每个国家名称作为Key和各州市为Value

HashMap<String,ArrayList<String>> stateCityMap = new HashMap<String,ArrayList<String>>() 

ArrayList<String> gujaratCityList = new ArrayList<String>(); 
gujaratCityList.add("Ahmedabad"); 
gujaratCityList.add("Surat"); 
gujaratCityList.add("Baroda"); 
....................... 

ArrayList<String> upCityList = new ArrayList<String>(); 
upCityList.add("Lucknow"); 
upCityList.add("Agra"); 
.......................... 

ArrayList<String> rajasthanCityList = new ArrayList<String>(); 
rajasthanCityList.add("Udaipur"); 
rajasthanCityList.add("Jaipur"); 
........................... 

stateCityMap.put("Gujarat",gujaratCityList); 
stateCityMap.put("UP",upCityList); 
stateCityMap.put("Rajasthan",rajasthanCityList); 

现在得到基于状态的所有城市名称Adapter

public void onBindViewHolder(MyViewHolder holder, int position) { 
    Log.e("State : ",stateList.get(position)); 
    ArrayList<String> cityList= (ArrayList<String>)stateCityMap.get(stateList.get(position)); 
    for(String cityName : cityList){ 
     Log.e("City : ",cityName); 
    } 
} 
+0

我是否在自定义适配器中传递stateList? – Abhi

+0

@ Abhi,是的,你必须将stateList和stateCityMap都传递给Adapter。 –

+0

谢谢我得到你的解决方案,其最好的一个谢谢你。 – Abhi

0

你可以得到如下。

Iterator iterator = map.keySet().iterator(); 
while(iterator.hasNext()) { 
    String key=(String)iterator.next(); 
    String value=(String)map.get(key); 
    Toast.makeText(ctx, "Key: "+key+" Value: "+value, Toast.LENGTH_LONG).show(); 
} 
0

包含HashMap不保留排序:

此类不作任何保证,而地图的顺序;在 特别是,它不能保证该订单随着时间的推移将保持恒定 。

看看LinkedHashMap,它保证了可预测的迭代顺序。

0

你可能想尝试这样的事情。

for (Map.Entry<String, ArrayList<String>> entry : citylist.entrySet()) 
{ 
    String key = entry.getKey();  // Your State 
    String value = entry.getValue(); // Your List of Cities. 

    // Split data and insert in Views 
} 

不过我建议(为易于使用的情况下),把所有的状态的List和使用本List状态的钥匙从HashMap得到Value

+0

brada我得到了你的答案,但它显示了我最后一个即古吉拉特邦古吉拉特邦古吉拉特邦。我怎样才能获得所有可能的价值? – Abhi

+0

你是否得到了最后一把钥匙?你在循环内部还是外部使用密钥? – Abbas

+0

我已经尝试了两个仍然我变得相同 – Abhi

0

请查看:

ArrayList<HashMap<String, String>> arrayList = new ArrayList<HashMap<String,String>>(); 
    HashMap<String, String> h1 = new HashMap<String, String>(); 
    h1.put("h1_key_1", "h1_value_1"); 
    h1.put("h1_key_2", "h1_value_2"); 
    arrayList.add(h1); 

    for (HashMap<String, String> hashMap : arrayList) { 
    System.out.println(hashMap.keySet()); 
    for (String key : hashMap.keySet()) { 
    System.out.println(hashMap.get(key)); 
    } 
} 
0
Try This: 

    public static void printMap(Map mp) { 
Iterator it = mp.entrySet().iterator(); 
while (it.hasNext()) { 
    Map.Entry pair = (Map.Entry)it.next(); 
    System.out.println(pair.getKey() + " = " + pair.getValue()); 
    it.remove(); // avoids a ConcurrentModificationException 
} 
}