对包含关键字和对象列表的地图进行排序
我有一张结构为Map<String, List<EmployeeIncome>>
的地图,其中关键字包含员工ID,员工收入包含员工详细信息,如empName,empCompany,incomeSrc。收入来源可能是多(工资,房屋出租等)。对包含关键字和对象列表的地图进行排序
public class EmployeeIncome{
private String empName;
private String empCompany;
private String incomeSrc;
public String getEmpName() {
return empName;
}
public void setEmpName(String empName) {
this.empName = empName;
}
public String getEmpCompany() {
return empCompany;
}
public void setEmpCompany(String empCompany) {
this.empCompany = empCompany;
}
public String getIncomeSrc() {
return incomeSrc;
}
public void setIncomeSrc(String incomeSrc) {
this.incomeSrc = incomeSrc;
}
}
员工的公司名称将是雇员ID唯一将在收入source.Now地图的所有情况相同的包括员工多数据,我想根据员工的地图排序name.Though我正在尝试使用比较器并尝试,但无法获得所需的输出。
在此先感谢。
像TreeMap
这样的排序图将根据其键进行排序,而不是分配给它们的值。因此,由于您的密钥是员工ID字符串,因此您只能通过ID对输出进行排序。
您应该重新考虑您的数据结构。最好映射一个Employee
对象作为关键字。然后,您可以同时访问员工的name
以及他的id
。
public class Employee implements Comparable<Employee> {
private long id;
private String name;
public long getId() {
return id;
}
public long getName() {
return name;
}
public int compareTo(Employee other) {
if (name != null) {
if (other != null) {
return name.compareTo(other.getName());
}
return 1;
}
if (other != null && other.getName() != null) {
return -1;
}
return 0;
}
也将实施Comparable
使得TreeMap
各种员工通过他们的名字。
因为你到目前为止还没有展示你所做的事情,所以我只是在建议一些事情。您可以使用TreeMap<EmployeeName, OtherValue>
,其中EmployeeName
是独一无二的,正如您所说的那样? TreeMap是NavigableMap的一个实现(SortedMap的特殊情况,其中导航功能,如最近的匹配楼层,ceil等)是允许的。
此外,您的钥匙将使用“自然顺序”进行订购。例如。如果您的EmployeeName
在字符串中,则它们将按字典顺序排列。
您正在询问错误的数据结构。大多数地图实现都有未排序的键。
只有异常 - TreeMap只吸引密钥。在你的例子中,键是员工ID,而不是他们的名字。 如果您希望通过员工姓名获得排序列表,您必须从地图中提取所有员工,将其放入列表并使用比较empName的比较器。
总之,您的地图总是按员工ID排序,因为它是这张地图的关键。
可能的重复[如何排序地图对Java的值?](http://stackoverflow.com/questions/109383/how-to-sort-a-mapkey-value-on-the-values -in-JAVA) –
weston
2015-02-12 09:06:02