我有一个HashMap如下:
public class MyHashMapOfEmployees {
public static void main(String a[]){
Map<String,Employee> allEmployees= new HashMap<String,Employee>();
allEmployees.put(new Employee("111",("Ram", "Smith", "developer"));
allEmployees.put(new Employee("222",("John", "Doe", "manager"));
allEmployees.put(new Employee("333",("Lisa", "Hart", "CEO"));
allEmployees.put(new Employee("444",("Mark", "Wayman", "VP"));
}
}
这是我的员工类:
class Employee{
private String firstName;
private String lastName;
private String position;
private String id;
public Employee(String fn, String ln, String p){
this.firstName = fn;
this.lastName = ln;
this.position = p;
}
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
public String getPosition() {
return position;
}
public String getId() {
return id;
}
}
我需要按员工名字对HashMap进行排序,并且可以省略键(id)。最终输出应如下:
John Doe manager
Lisa Hart CEO
Mark Wayman VP
Ram Smith developer
我尝试使用以下比较器:
private final Comparator<Employee> employeeComparator = new Comparator<Employee>() {
@Override
public int compare(Employee o1, Employee o2) {
return o1.getFirstName().compareTo(o2.getFirstName());
}
};
如何根据值(在我的情况下是一个对象 - Employee)对这个HashMap进行排序,而不是通过我的对象中的特定字段(firstName)对其进行排序?
TreeMap不是正确的解决方案吗?
我已经搜索了stackOverflow,这个特定的场景没有任何内容可供我申请并开始工作。这不是一个重复,评论中提供的链接是一个不同的任务。
如果不在中间创建TreeMap,我可以执行以下操作吗?
SortedSet<Map.Entry<String, Employee>> employeesSortedByFirstName = new TreeSet<Map.Entry<String, Employee>>(employeeComparator());
employeesSortedByFirstName.addAll(allEmployees.entrySet());
这会按名字排序我的地图值吗?...还是按插入顺序排序?..
或者 - 我之间需要一个TreeMap:
SortedSet<Map.Entry<String, Employee>> employeesSortedByFirstName = new TreeSet<Map.Entry<String, Employee>>(employeeComparator());
SortedMap<String, Employee> sortedMap = new TreeMap<String, Employee>();
sortedMap.putAll(allEmployees); //hashmap into treemap
employeesSortedByFirstName.addAll(sortedMap.entrySet()); //add treemap into the sorted set
目标是按名字排序,而不是按地图的全部价值排序。