2012-12-24 97 views
0

我已經使用Google搜索,但沒有將HashMap<String, ArrayList<Class>>轉換爲ArrayList<Class>。請有人幫助我嗎?如何在Java中將HashMap <String,ArrayList <MyClass>>轉換爲ArrayList <MyClass>?

基本上,我想從調用構造函數改變我的方法getStudentLst,並將哈希映射轉換爲arrayList,如下所示。我已經嘗試了很多次,但是它一直在產生錯誤。我錯了嗎?

ArrayList<Student> arrStudLst = new ArrayList<Student>(hmpStudent.keySet()); 
    Collectoins.sort(arrStudLst, new Comparator()); 
    return arrStudLst; 

,但它不工作,並生成錯誤「構造的ArrayList(設置)是未定義

任何幫助,非常感謝!阿丹

/* works well but i want to avoid calling constructor */ 
public ArrayList<Student> getStudentLst(HashMap<String, ArrayList<Student>> hmpStudent) 
{ 
    ArrayList<Student> arrStudLst = new ArrayList<Student>(); 
    Set<String> keylst = hmpStudent.keySet(); 
    Student student; 
    for(String keys: keylst) 
    {   
     for(Student f: hmpStudent.get(keys)) 
     {  
     student = new Student(f.getName(),f.getGrade(), f.getTeacher());    arrStudLst.add(student); 
     } 
    } 
    Collections.sort(arrStudLst,new StudentComparator()); 
    return arrStudLst; 
} 
+0

你想獲得數組列表,鍵或值? – Suranga

回答

1

您試圖初始化列表你的地圖的鑰匙,但鑰匙是絃樂,他們不是學生

你需要返回一個列表,包含每個學生在地圖的每個值中。因此,代碼是:

Set<Student> allStudents = new HashSet<Student>(); // use a set to avoid duplicate students 
for (List<Student> list : map.values()) { 
    allStudents.addAll(list); 
} 
List<Student> allStudentsAsList = new ArrayList<Student>(allStudents); 
+0

我試過所有的建議,一切運作良好。非常感謝。 – user1926649

0

我可以嘗試

ArrayList<MyClass> list = new ArrayList<>(); 
for (ArrayList<MyClass> l : map.values()) { 
    list.addAll(l); 
} 
0

的關鍵是一個字符串,所以 hmpStudent.keySet()將返回List<String>而不是List<Student>

new ArrayList<Student>(hmpStudent.keySet()); 

因此以上聲明將失敗。您可以使用以下提到的方法

public List<Student> getAllStudents(Map<String, ArrayList<Student> map){ 
    List<Student> allStudents = new ArrayList<Student>(); 
    for (List<Student> list : map.values()) { 
     allStudents.addAll(list); 
    } 
    return allStudents; 
} 
0

如果您在ArrayList地圖是地圖大,但較少的元素,那麼這是你可以嘗試的東西。

public ArrayList<Student> getStudentLst(HashMap<String, ArrayList<Student>> hmpStudent) 
{ 
    List<Student> arrStudLst = new ArrayList<Student>(); 
    for(ArrayList<Student> studentLst : hmpStudent.values()) { 
     arrStudLst.addAll(studentLst); 
    } 
    Collections.sort(arrStudLst,new StudentComparator()); 
    return arrStudLst; 
} 
+0

爲什麼要創建這個列表的中間列表,而不是直接迭代'map.values()'返回的列表集合? –

+0

@JB Nizet:我的錯誤。我腦海中還有其他東西,但現在意識到它實際上正在做與其他人發佈的相同的東西。我不確定是否刪除我的答案是一個正確的選擇。現在更新我的答案。 – Parvez

相關問題