2016-09-01 113 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 
} 
}