对具有值对象内的日期的哈希映射进行排序



可能的重复项:
如何在 Java 中的值上对 Map<Key、Value> 进行排序?

假设我有一张地图,

比如
Map<String, Student> studDetails = new HashMap<String, Student>();

地图包含以下条目

studDetails.put("1",student1);
studDetails.put("2",student2);
studDetails.put("3",student3);
studDetails.put("4",student4);

学生实体是类似

Class Student{
           private String studName;
           private List<Group> groups;
}

组实体将像

Class Group{
             private String groupName;
             private Date creationDate;
}

好的,所以我需要的是当我显示学生详细信息时,它将按照组创建日期的顺序排列。因此,如果学生映射到多个组,我们可以获取第一组的创建日期。

如何使用这种情况在我的哈希图studDetails上给出酸痛。?

谁能帮忙..请。。

HashMap 未排序,您应该使用 SortedMap 实现,例如 TreeMap

然后,您可以创建自己的Comparator<String>,该将按实际Student实例的groups属性进行排序,但您需要实际映射,因为TreeMap按键排序,因此这是一个可能但不好的解决方案。

所以有了TreeMap

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);

如何使用此场景在我的哈希图螺柱上给出酸痛的详细信息?

你不能,因为HashMap从根本上来说是无序的(或者至少,排序是不稳定的和无益的)。

即使对于像TreeMap这样的排序映射,排序顺序也是基于,而不是

将学生对象添加到列表并使用Collections.sort(list, custom_comparetor).

准备一个自定义比较器对学生对象进行排序。

试试这段代码可能会有所帮助

学生比较器.java

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());
    }
}

组比较器.java

public class GroupComparator implements Comparator {
    public int compare(Object grp1, Object grp2) {
        return ((Group) grp1).getCreationDate().compareTo(
                ((Group) grp2).getCreationDate());
    }
}

主要方法

将学生对象添加到一个新列表

然后使用

Collections.sort(new_stud_list, new StudentComparator());

添加与组相当

class Group implements Comparable {
    private String groupName;
    private Date creationDate;
    public Date getCreationDate() {
        return creationDate;
    }
    @Override
    public int compareTo(Object t) {
        Group g = (Group) t;
        return getCreationDate().compareTo(g.getCreationDate());
    }
}

在学生中对小组使用树集而不是列表

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());
    }
}

现在使用

TreeSet<Student> studDetails = new TreeSet();

然后添加学生。它将被订购一个。希望你能处理空指针异常

相关内容

  • 没有找到相关文章