假设我有一个bean的集合,它由empld,dept,project帮助,为它编写自定义比较器,并使用apache集合ComparatorChain对这个bean的列表进行排序。豆子如下。
public class Employee {
protected String empId; //alphanumeric e.g.abc123
protected String empFullName;
protected String empAddress;
protected String dept;
protected String project;
protected String customer;
public String getEmpId() {
return empId;
}
public void setEmpId(String empId) {
this.empId = empId;
}
public String getEmpFullName() {
return empFullName;
}
public void setEmpFullName(String empFullName) {
this.empFullName = empFullName;
}
public String getEmpAddress() {
return empAddress;
}
public void setEmpAddress(String empAddress) {
this.empAddress = empAddress;
}
public String getDept() {
return dept;
}
public void setDept(String dept) {
this.dept = dept;
}
public String getProject() {
return project;
}
public void setProject(String project) {
this.project = project;
}
public String getCustomer() {
return customer;
}
public void setCustomer(String customer) {
this.customer = customer;
}
}
客户价值观可以是:公司,政府,大学
现在假设集合中有成千上万的记录(bean),现在我想要的是同一个empId(可以出现两次),如果客户是公司移动,在同一个客户名称大学的下方。客户的记录可能不是有序的,所以任何人都可以先出现等等。
所以基本上我想移动,如果两个或多个具有相同empId的记录,其中一个具有customer = Company,则将其移动到具有相同empId的订单下方 e.g。
如何以高效且可能的线程安全方式实现记录的交换/重新排列。
答案 0 :(得分:0)
如果要对集合中的记录进行排序,则需要让该对象类根据需要实现比较器和实现方法。
答案 1 :(得分:0)
我解决了这个问题如下:
您可以创建一个单独的比较器类来实现Comparator和 有比较方法公司,政府,大学。
您可以在Employee类中创建创建者比较器方法 公司,政府,大学是这样的:
public static Comparator COMPARE_BY_COMPANY = new Comparator() { public int compare(员工o1,员工o2) {
if (o1.company == null && o2.company == null) return 0;
if (o1.company != null && o2.company == null) return -1;
if (o1.company == null && o2.company != null) return 1;
return o1.company.compareTo (o2.company);
}
};
虽然第一种方法更好,但第二种方法也没有危害。
然后在您想要自定义排序顺序的类中,执行以下操作:
ComparatorChain chain = new ComparatorChain();
chain.addComparator(Employee.COMPARE_BY_COMPANY);
chain.addComparator(Employee.COMPARE_BY_GOVERNMENT);
chain.addComparator(Employee.COMPARE_BY_UNIVERSITY);
Collections.sort(EmployeeList, chain);
其中ComparatorChain是org.apache.commons.collections.comparators.ComparatorChain。
上述代码将做的是它将按公司排序,然后由政府排序,然后由大学排序,最后将对列表进行排序,结果将按顺序显示。