对包含关键字和对象列表的地图进行排序

问题描述:

我有一张结构为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我正在尝试使用比较器并尝试,但无法获得所需的输出。

在此先感谢。

+0

可能的重复[如何排序地图对Java的值?](http://*.com/questions/109383/how-to-sort-a-mapkey-value-on-the-values -in-JAVA) – weston 2015-02-12 09:06:02

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排序,因为它是这张地图的关键。