我想按升序wrt“Student.name”对TreeMap进行排序。我不想创建一个新的ArrayList。有没有办法做到这一点?
Map studentMap = new TreeMap();
studentMap.put(id, student); //id is double
public class Student{
String name;
int number;
....
}
答案 0 :(得分:2)
您可以通过两种方式执行此操作:
由于无法将基于值的比较器传递给TreeMap,因此可以执行以下操作:
TreeMap sort by value
使Student
实施Comparable
接口
public class Student implements Comparable<Student> {
@Override
public int compareTo(Student o) {
return this.getName().compareTo(o.getName());
}
}
在第一种情况下,您需要在集合中调用上述方法。在第二个中,只需将学生添加到地图中即可。
答案 1 :(得分:1)
您可以在创建TreeMap
时使用自定义比较器。
Map studentMap = new TreeMap(new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
// Your logic to sort it based on Student name goes here
return 0;
}
});
答案 2 :(得分:1)
如果您正在使用TreeMap,那么记录将已经排序。您需要在Student类中实现Comparable接口并且必须覆盖compareTo方法
Student implements Comparable {
// override compareTo wrt name
@Override
public int compareTo(Student otherStudent) {
return name.compareTo(otherStudent.name);
}
}
答案 3 :(得分:0)
TreeMap
根据键对其条目进行排序,而非值。由于您有Comparator<Student>
个密钥,因此无法提供Double
。
如果您确实需要从Double
到Student
的地图,则无法按照您想要的方式对其进行排序。
如果不考虑将TreeSet<Student>
与Comparator<Student>
或Comparable<Student>
一起使用。