你应该为学生组使用 TreeSet 而不是 HashSet 。
public void add(String last,String first,Integer id, String club){ TreeSet< Student> set = new TreeSet< Student>(studentComp); if(!map.containsKey(club)){ set.add(new Student(last,first,id)); map.put(club,set); } else { set = map.get(club); set.add(new Student(last,first,id)); $ b但是你必须定义一个用于排序的比较器,如下所示。
private static Comparator< Student> studentComp = new Comparator< Student>(){ @Override public int compare(Student s1,Student s2){ return(s1.lastpareTo(s2.last)); } };另外,您应该将您的学生属性封装在getter / setter方法中,而不是直接以我已经完成了上面的内容(正如你的班级目前允许的那样)。
I got everything else to work except the sort method. I need to sort the Students in the HashMap based on the Student's first attribute. I need the sort method to happen after I added all of the students in the HashMap, not while it's being added.
package HashMap; import java.io.InputStream; import java.util.HashMap; import java.util.HashSet; import java.util.Scanner; public class clubMapping { HashMap<String, HashSet<Student>> map = new HashMap<String, HashSet<Student>>(); public clubMapping(String clubName) { InputStream is = getClass().getClassLoader().getResourceAsStream( "student.txt"); Scanner scan = new Scanner(is); while (scan.hasNext()) add(scan.next(), scan.next(), Integer.parseInt(scan.next()), scan.next()); scan.close(); System.out.println(map); System.out.println(); System.out.println(map.get(clubName)); } public void add(String last, String first, Integer id, String club) { HashSet<Student> set = new HashSet<Student>(); if (!map.containsKey(club)) { set.add(new Student(last, first, id)); map.put(club, set); } else { set = map.get(club); set.add(new Student(last, first, id)); } } public static void main(String[] args) { new clubMapping("Math"); } } package HashMap; public class Student { String last, first; Integer id; public Student(String l, String f, Integer i) { last = l; first = f; id = i; } public String toString() { return last + " " + first + " " + id; } }解决方案
You should use a TreeSet instead of a HashSet for the student set. A tree set is implicitly sorted, a hash set is not.
public void add(String last, String first, Integer id, String club) { TreeSet<Student> set = new TreeSet<Student>(studentComp); if (!map.containsKey(club)) { set.add(new Student(last, first, id)); map.put(club, set); } else { set = map.get(club); set.add(new Student(last, first, id)); } }But you must define a comparator to use for the sorting, as shown below.
private static Comparator<Student> studentComp = new Comparator<Student>() { @Override public int compare(Student s1, Student s2) { return (s1.lastpareTo(s2.last)); } };Also, you should probably encapsulate your student attributes in getter/setter methods, rather than accessing them directly as I've done above (as your class currently allows).