如何对地图进行排序<object,arraylist <object =“”>&gt;根据arraylist的属性?

时间:2016-12-18 23:42:08

标签: java

我正在创建一个程序,我必须为大学建立一个数据库。我使用地图来保存数据,我需要按属性过程对其进行排序,以显示主题的名称和代码,但我不知道该怎么做。非常感谢!

 public class Student {
    private String apellido = "";
    private String nombre = "";
    private String correo = "";
    private String dni = "";

    public Student(String lastname, String name, String mail, String id)                
    {
        this.lastname = lastname;
        this.name = name;
        this.mail = mail;
        this.id = id;
    }
}


public class Subject {
    private String name = "";
    private int code
    private int course;

    public Subject(String name, int code, int course) {
        this.name = name;
        this.code = code;
        this.course = course;
    }

    public String getName() {
        return name;
    }

    public int getCode() {
        return code;
    }

    public int getCourse() {
        return course;
    }
}


public class Model {
private Map<Subject, List<Student>> map = new HashMap<>();

    public void orderByCourse() {
    System.out.printf("%-20s %-6s\n", "subject", "code");
    List<String> list = new ArrayList<String>();
    for (Entry<Subject, List<Student>> element : map.entrySet()){
        Subject key = element.getKey();
        List<Student> value = element.getValue();
        System.out.printf("%-20s %-6s\n", key.getName(), key.getCode());
    }
}

1 个答案:

答案 0 :(得分:0)

从技术上讲,您无法对Map进行排序。 Map中的键和值的顺序/顺序由Map实现控制。

可以做的是获取地图的键集,值集或条目集的副本,然后对该副本进行排序。但是,请务必注意,这不会影响原始地图条目的顺序。

所以你的问题实际上归结为两个子问题:

问题:如何复制相应的设置?

回答:使用ArrayList(Collection)复制构造函数。

问题:如何根据列表元素类的属性对数组列表进行排序?

回答:为元素类创建一个Comparator对象,该对象根据所需属性的值对一对元素实例进行排序。另请参阅Sort ArrayList of custom Objects by property