0

我用谷歌搜索过,但没有转换HashMap<String, ArrayList<Class>>ArrayList<Class>. 有人可以帮我吗?

基本上,我想将下面的方法 getStudentLst 从调用构造函数中更改,并将哈希映射转换为 arrayList,如下所示。我已经尝试了很多次,但它一直在产生错误。我哪里出错了?

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

但它不起作用并生成错误“构造函数 ArrayList(Set) 未定义

非常感谢任何帮助!亚当

/* 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;
}
4

4 回答 4

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);
于 2012-12-24T13:30:04.523 回答
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;
}
于 2012-12-24T13:43:11.900 回答
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;
}
于 2012-12-24T17:32:15.157 回答
0

我可以试试

ArrayList<MyClass> list = new ArrayList<>();
for (ArrayList<MyClass> l : map.values()) {
    list.addAll(l);
}
于 2012-12-24T13:30:15.010 回答