java - sorting a hashmap with date inside value object
本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
How to sort a Mapon the values in Java?
假设我有一张地图
地图上有这样的条目
1 2 3 4 | studDetails.put("1",student1); studDetails.put("2",student2); studDetails.put("3",student3); studDetails.put("4",student4); |
学生实体就像
1 2 3 4 |
集团实体将
好的,所以我需要的是当显示学生的详细信息时,它将按组创建日期的顺序排列。因此,如果学生被映射到多个组,我们可以取第一个组的创建日期。
我怎么能用这个场景在我的hashmap
有人能帮忙吗……请……
hashmap没有排序,您应该使用
然后您可以创建自己的
所以对于
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | public class StudentGroupComparator implements Comparator<String> { private Map<String, Student> sourceMap; public StudentGroupComparator(Map<String, Student> sourceMap) { this.sourceMap = sourceMap; } @Override public int compare(String key1, String key2) { // TODO: null checks Student student1 = sourceMap.get(key1); Student student2 = sourceMap.get(key2); Date o1CreationDate = student1.groups.get().creationDate; Date o2CreationDate = student2.groups.get().creationDate; return o1CreationDate.compareTo(o2.creationDate); } } SortedMap<String, Student> sortedMap = new TreeMap<String, Student>(new StudentGroupComparator(sourceMap)); sortedMap.putAll(sourceMap); |
How can I given the soring on my HashMap studDetails using this scenario?
你不能这样做,因为
即使对于像
添加可比组
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
在学生组中使用treeset而不是list
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | public class Student implements Comparable { private String studName; private TreeSet<Group> groups; public TreeSet<Group> getGroups() { return groups; } @Override public int compareTo(Object t) { Student t1 = (Student) t; return groups.first().getCreationDate() .compareTo(t1.getGroups().first().getCreationDate()); } } |
现在使用
1 |
然后添加学生。它将被订购一个。希望您能处理空指针异常
将学生对象添加到列表中并使用
准备一个自定义比较器来排序学生对象。
尝试此代码可能会有所帮助
studentcomparator.java语言
1 2 3 4 5 6 7 8 9 10 11 12 | class StudentComparator implements Comparator { public int compare(Object stud1, Object stud2) { List<Group> list1Grp = ((Student) stud1).getGroups(); List<Group> list2Grp = ((Student) stud2).getGroups(); Collections.sort(list1Grp, new GroupComparator()); Collections.sort(list2Grp, new GroupComparator()); return list1Grp.get(0).getCreationDate().compareTo(list2Grp.get(0).getCreationDate()); } } |
GroupComparator.java
1 2 3 4 5 6 7 8 | public class GroupComparator implements Comparator { public int compare(Object grp1, Object grp2) { return ((Group) grp1).getCreationDate().compareTo( ((Group) grp2).getCreationDate()); } } |
主要方法
将学生对象添加到一个新列表
然后使用
1 |