2012-12-24 5 views
0

나는 googled했다 그러나 HashMap<String, ArrayList<Class>>ArrayList<Class>에 개조해서 오지 않았다. 누군가 제가 제발 도와 주실 수 있습니까?HashMap <String, ArrayList <MyClass>>를 Java의 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

내가 열쇠는 그래서 hmpStudent.keySet() 위 그러므로 List<String> 아닌 List<Student>

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

를 반환합니다, String의

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

시도 할 수 있습니다 문이 실패합니다. 당신은 아래에 언급 된 방법을지도에서 ArrayList 다음이 당신이 시도 할 것입니다지도에 큰하지만 적은 요소 귀하의 경우

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

를 사용할 수 있습니다.

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

관련 문제