2014-04-23 37 views
2

我有一個ArrayList >>它包含某些鍵值條目。如: -從ArrayList <HashMap <String,String >>>獲取鍵值到另一個數組中

ArrayList<HashMap<String, String>> myList = new ArrayList<HashMap<String,String>>(); 
HashMap<String,String> map = new HashMap<String,String>(); 
map.put("NewId", newId); 
map.put("Title", title); 
map.put("Description", description); 
myList.add(map); 

「NewId」對於多個條目可以是相似的。

另外我有一個顏色數組: -

String[] colors = new String[]{"#1F1A17", "#62934D", "#F9B03F", "#7959BC", "#74B8DE", "#E65641", "#7CC8BB", "#D7CE5D", "#D6BE95", "#B694D1"}; 

我希望有一個巢組全部用相同的「NEWID」條目在一起,爲它們分配第一顏色,其他項目旁邊類似的「NEWID」用第二種顏色等等,直到具有前10個相同「NewId」的項目被賦予它們各自的顏色。

例如: - 分組

NewId Title Description 
101 title1 des1 
102 title2 des2 
103 title3 des3 
101 title4 des4 
102 title5 des5 
103 title6 des6 

分組後,前

NewId Title Description 
101 title1 des1 ------> color1 
101 title4 des4 ------> color1 
102 title2 des2 ------> color2 
102 title5 des5 ------> color2 
103 title3 des3 ------> color3 
103 title6 des6 ------> color3 

我所做的尚未: -

public class MyList { 

    private ArrayList<HashMap<String, String>> list = new ArrayList<>(); 

    public boolean add(HashMap<String, String> map) { 
     return list.add(map); 
    } 

    public void setColor(String newId, String color) { 
     for (HashMap<String, String> m : list) 
      if (m.containsKey(newId)) 
       m.put("color", color); 
    } 

    public String getGroupKey(String key, int i) {  
     ArrayList<String> uniqeList = getUniqKeyList(key); 
     Collections.sort(uniqeList); 
     return uniqeList.get(i); 
    } 

    public ArrayList<String> getUniqKeyList(String key){ 
     ArrayList<String> l = new ArrayList<>(); 
     for (HashMap<String, String> m : list) 
      if(!l.contains(m.get(key))) 
       l.add(m.get(key)); 
     return l; 
    } 
} 

public static void main(String[] args) throws Exception { 
     MyList myList = new MyList(); 
     HashMap<String,String> map = new HashMap<String,String>(); 
     map.put("NewId", newId); 
     map.put("Title", title); 
     map.put("Description", description); 
     myList.add(map); 

     String[] colors = new String[]{"#1F1A17", "#62934D","#B694D1"}; 

     int i=0; 
     while (true) { 
        if(i == colors.length) 
          break; 
      String s = myList.getGroupKey("NewId", i); 
      if(s == null) 
       break; 
      else 
       myList.setColor(s, colors[i++]); 
     }  
    } 
itemsAdapter = new LazyAdapter(myContext, myList); 

但我得到一個錯誤: -

`E/AndroidRuntime(10276): Caused by: java.lang.IndexOutOfBoundsException: Invalid index 1, size is 1` 

我該如何解決這個問題?

回答

0

嘗試檢查指標是否在列表中的可用與否,因爲只有一個值列表,但你想的

public String getGroupKey(String key, int i) {  
    ArrayList<String> uniqeList = getUniqKeyList(key); 
    Collections.sort(uniqeList); 
    return uniqeList.get(i); 
} 
+0

我仍然得到相同的錯誤 – user3534519

0
public ArrayList<String> getUniqKeyList(String key){ 
    ArrayList<String> l = new ArrayList<>(); 
    for (HashMap<String, String> m : list) 
     if(!l.contains(m.get(key))) 
      l.add(m.get(key)); 
    return l; 
} 

獲得多個

public String getGroupKey(String key, int i) 
    { 
     ArrayList<String> uniqeList = getUniqKeyList(key); 
     Collections.sort(uniqeList); 
     if (uniqeList.size() > i) // check here whether the list size is greater than index 
     { 
      return uniqeList.get(i); 
     } 
     else      // else it returns an empty you can change by your concern 
     { 
      return ""; 
     } 
    } 

,而不是你有條件是否添加項目到列表中或不是

public String getGroupKey(String key, int i) {  
    ArrayList<String> uniqeList = getUniqKeyList(key); 
    Collections.sort(uniqeList); 
    return uniqeList.get(i); 
} 

由於您在此處沒有檢查相同的條件,因此無法確定數據是否一致 - keyi之間的依賴關係會丟失。

+0

你能幫我解決這個問題嗎? – user3534519

+0

好吧,看起來'uniqueList'的大小將是0或1(如果'list'中沒有重複值)。由於'key'和'i'之間沒有關係,你可以從'getGroupKey'方法中刪除i參數並將return語句改爲'return uniqeList.size()!= 0?uniqueList.get(0):「 「;' – mihail

1

如果關於異常的問題,則在在特定情況下的問題:

1此方法總是returs只有1個元素的數組列表:

public ArrayList<String> getUniqKeyList(String key) { 
    ArrayList<String> l = new ArrayList<>(); 
    for (HashMap<String, String> m : list) 
     if(!l.contains(m.get(key))) 
      l.add(m.get(key)); 
    return l; 
} 

2顏色陣列具有長度3.

3第一次迭代,而我= 0會好的。

4第二次迭代(i = 1個< color.length = 3)具有問題:

public String getGroupKey(String key, int i) {  
    ArrayList<String> uniqeList = getUniqKeyList(key); 
    Collections.sort(uniqeList); 
    return uniqeList.get(i); 
} 

uniqeList.get(ⅰ)= uniqeList.get(1),但具有uniqeList長度1(記數從0開始)。

+0

你可以請建議我一種方法來解決這個問題嗎? – user3534519

+0

myList的尺寸必須> =顏色的大小。添加到myList至少3個HashMap。這將排除異常。但我沒有檢查你的整個算法。 – DmitryKanunnikoff

相關問題