按照与另一个java数组相同的顺序对列表对象进行排序
您好,我有我想为部门对象订购一个员工列表,但我在这里有一个数组中的顺序对象和示例按照与另一个java数组相同的顺序对列表对象进行排序,java,sorting,collections,Java,Sorting,Collections,您好,我有我想为部门对象订购一个员工列表,但我在这里有一个数组中的顺序对象和示例 public class Employee { private String name; private int age; private double salary; private Department department; public Employee(String name, int age, double salary, Department departme
public class Employee {
private String name;
private int age;
private double salary;
private Department department;
public Employee(String name, int age, double salary, Department department) {
...
}
// standard getters, setters and toString
}
底线是按部门安排的顺序排列的员工
employeesSortedByDepartment = [Employee{"Frank", 33, 7000, Department{id=5, name='marketing'}},Employee{ "Jessica", 23, 4000, Department{id=6, name='communication'} },Employee{"Steve", 26, 6000, Department{id=3, name='administration'} },Employee{"Earl", 43, 10000, Department{id=2, name='Human Resources'}},Employee{ "Pearl", 33, 6000, =Department{id=6, name='communication'} },Employee{ "John", 23, 5000, Department{id=4, name='operations'} }];
我在工作中使用过一些东西,但它没有给我预期的结果
Collections.sort(department, new Comparator<String>(){
public int compare(String left, String right) {
return arrOrderDepartment[stringList.indexOf(left)] - arrOrder[stringList.indexOf(right)];
}
});
Collections.sort(部门,新的比较器(){
公共整数比较(左字符串、右字符串){
返回arrOrderDepartment[stringList.indexOf(左)]-arrOrder[stringList.indexOf(右)];
}
});
我正在使用Java6
非常感谢您能为我提供的帮助因为您的部门序列已经按顺序1-6排列,您不需要“排序”-您需要做的是应用您想要的顺序
int[] arrOrderDepartment = {5, 1, 3, 2, 6, 4};
Department[] sortedDepartment = new Department[6];
for (int i = 0; i < 6; i++) {
sortedDepartment[i] = department[arrOrderDepartment[i] - 1]
}
int[]arrordepartment={5,1,3,2,6,4};
部门[]sortedDepartment=新部门[6];
对于(int i=0;i<6;i++){
sortedDepartment[i]=部门[ArrordDepartment[i]-1]
}
现在,
sortedDepartment[0]
将指向部门5,sortedDepartment[1]
将指向部门1,依此类推。您可以按如下操作:
public class Main {
public static void main(String[] args) {
Department[] departments = new Department[] { new Department(1, "Computing"),
new Department(2, "Human Resources"), new Department(3, "administration"),
new Department(4, "operations"), new Department(5, "marketing"), new Department(6, "communication") };
Employee[] employees = new Employee[] { new Employee("John", 23, 5000, departments[5]),
new Employee("Steve", 26, 6000, departments[3]), new Employee("Frank", 33, 7000, departments[4]),
new Employee("Earl", 43, 10000, departments[2]), new Employee("Jessica", 23, 4000, departments[1]),
new Employee("Pearl", 33, 6000, departments[0]) };
String[] arrOrderDepartment = new String[] { "marketing", "Computing", "administration", "Human Resources",
"communication", "operations" };
Employee[] employeesSortedByDepartment = new Employee[employees.length];
for (int i = 0; i < arrOrderDepartment.length; i++) {
employeesSortedByDepartment[i] = getEmployeeByDeptId(employees,
findDeptIdByDeptName(departments, arrOrderDepartment[i]));
}
for (Employee employee : employeesSortedByDepartment) {
System.out.println(employee);
}
}
static int findDeptIdByDeptName(Department[] departments, String departmentName) {
for (int i = 0; i < departments.length; i++) {
if (departments[i].getName().equalsIgnoreCase(departmentName)) {
return departments[i].getId();
}
}
return -1;
}
static Employee getEmployeeByDeptId(Employee[] employees, int id) {
for (Employee employee : employees) {
if (employee.getDepartment().getId() == id) {
return employee;
}
}
return null;
}
}
我认为您可以用类似的FOMJava8解决这个问题(我相信) 这是位于此链接的oracle文档
这个链接有一个你的问题的例子 谢谢你的回答,昨天通过分析和测试,我得到了与答案类似的解决方案!给我这里我把密码
public class Main {
public static void main(String[] args) {
Department[] departments = new Department[] {
new Department(1, "Computing" ), new Department(2, "Human Resources"),
new Department(3, "administration"), new Department(4, "operations"),
new Department(5, "marketing"), new Department(6, "communication"),
new Department(7, "shopping"), new Department(6, "Inventory")
};
final Employee[] employees = new Employee[] {
new Employee("John", 23, 5000, departments[5]), new Employee("Steve", 26, 6000, departments[3]),
new Employee("Frank", 33, 7000,departments[4]), new Employee("Earl", 43, 10000, departments[2]),
new Employee("Jessica", 23, 4000, departments[1]), new Employee("Pearl", 33, 6000, departments[0]),
new Employee("Pearl", 33, 6000, departments[6]), new Employee("Pearl", 33, 6000, departments[7])
};
final String[] arrOrderDepartment = new String[]{"operations", "Computing", "administration", "Inventory", "Human Resources", "communication", "marketing"};
final List<Employee> employeeList = Arrays.asList(employees);
List<Employee> copyEmployeeList = Arrays.asList(employees);
Collections.sort(copyEmployeeList, new Comparator<Employee>(){
public int compare(Employee o1, Employee o2)
{
String a = getDepartmentOfList(o1.getDepartment().getName(), employeeList);
String b = getDepartmentOfList(o2.getDepartment().getName(), employeeList);
return indexOf(a, arrOrderDepartment) - indexOf(b, arrOrderDepartment);
}
});
System.out.println(copyEmployeeList);
}
private static String getDepartmentOfList(String name, List<Employee> employeeList) {
for (Employee employee: employeeList) {
if (name.equalsIgnoreCase(employee.getDepartment().getName())){
return employee.getDepartment().getName();
}
}
return null;
}
private static int indexOf( String c , String[] arr ) {
for( int i = 0 ; i < arr.length ; i++ ) {
if( arr[i].equalsIgnoreCase(c) ) {
return i;
}
}
return -1;
}
}
公共类主{
公共静态void main(字符串[]args){
部门[]部门=新部门[]{
新部门(1,“计算机”),新部门(2,“人力资源”),
新部门(3,“行政”),新部门(4,“运营”),
新部门(5,“营销”)、新部门(6,“传播”),
新部门(7,“购物”),新部门(6,“库存”)
};
最终员工[]员工=新员工[]{
新员工(“John”,235000,部门[5]),新员工(“Steve”,266000,部门[3]),
新员工(“Frank”,337000,部门[4]),新员工(“Earl”,4310000,部门[2]),
新员工(“Jessica”,234000,部门[1]),新员工(“Pearl”,336000,部门[0]),
新员工(“Pearl”,336000,部门[6]),新员工(“Pearl”,336000,部门[7])
};
最终字符串[]arrordepartment=新字符串[]{“操作”、“计算”、“管理”、“库存”、“人力资源”、“通信”、“营销”};
最终列表employeeList=Arrays.asList(员工);
List copyEmployeeList=Arrays.asList(员工);
Collections.sort(copyEmployeeList,new Comparator(){
公共整数比较(员工o1、员工o2)
{
字符串a=getDepartmentOfList(o1.getDepartment().getName(),employeeList);
字符串b=getDepartmentOfList(o2.getDepartment().getName(),employeeList);
返回索引of(a,arrordepartment)-索引of(b,arrordepartment);
}
});
System.out.println(copyEmployeeList);
}
私有静态字符串getDepartmentOfList(字符串名称,列表employeeList){
用于(员工:员工列表){
if(name.equalsIgnoreCase(employee.getDepartment().getName())){
返回employee.getDepartment().getName();
}
}
返回null;
}
私有静态int indexOf(字符串c,字符串[]arr){
对于(int i=0;i
添加其他部门以查看代码的行为并首先添加添加其他部门以查看代码的行为并首先添加它OP清楚地提到他/她正在使用Java 6。啊,对不起,如果Java 6,但是我向主题提出了一个新的建议我向主题提出了一个新的建议topic@ammf18-我可以看出你已经编辑了你的问题。我已根据您更新的问题更新了答案。如果有任何疑问/问题,请告诉我。我对该主题提出了新的建议
public class Main {
public static void main(String[] args) {
Department[] departments = new Department[] { new Department(1, "Computing"),
new Department(2, "Human Resources"), new Department(3, "administration"),
new Department(4, "operations"), new Department(5, "marketing"), new Department(6, "communication") };
Employee[] employees = new Employee[] { new Employee("John", 23, 5000, departments[5]),
new Employee("Steve", 26, 6000, departments[3]), new Employee("Frank", 33, 7000, departments[4]),
new Employee("Earl", 43, 10000, departments[2]), new Employee("Jessica", 23, 4000, departments[1]),
new Employee("Pearl", 33, 6000, departments[0]) };
String[] arrOrderDepartment = new String[] { "marketing", "Computing", "administration", "Human Resources",
"communication", "operations" };
Employee[] employeesSortedByDepartment = new Employee[employees.length];
for (int i = 0; i < arrOrderDepartment.length; i++) {
employeesSortedByDepartment[i] = getEmployeeByDeptId(employees,
findDeptIdByDeptName(departments, arrOrderDepartment[i]));
}
for (Employee employee : employeesSortedByDepartment) {
System.out.println(employee);
}
}
static int findDeptIdByDeptName(Department[] departments, String departmentName) {
for (int i = 0; i < departments.length; i++) {
if (departments[i].getName().equalsIgnoreCase(departmentName)) {
return departments[i].getId();
}
}
return -1;
}
static Employee getEmployeeByDeptId(Employee[] employees, int id) {
for (Employee employee : employees) {
if (employee.getDepartment().getId() == id) {
return employee;
}
}
return null;
}
}
Employee [name=Frank, age=33, salary=7000.0, department=Department [id=5, name=marketing]]
Employee [name=Pearl, age=33, salary=6000.0, department=Department [id=1, name=Computing]]
Employee [name=Earl, age=43, salary=10000.0, department=Department [id=3, name=administration]]
Employee [name=Jessica, age=23, salary=4000.0, department=Department [id=2, name=Human Resources]]
Employee [name=John, age=23, salary=5000.0, department=Department [id=6, name=communication]]
Employee [name=Steve, age=26, salary=6000.0, department=Department [id=4, name=operations]]
public class Main {
public static void main(String[] args) {
Department[] departments = new Department[] {
new Department(1, "Computing" ), new Department(2, "Human Resources"),
new Department(3, "administration"), new Department(4, "operations"),
new Department(5, "marketing"), new Department(6, "communication"),
new Department(7, "shopping"), new Department(6, "Inventory")
};
final Employee[] employees = new Employee[] {
new Employee("John", 23, 5000, departments[5]), new Employee("Steve", 26, 6000, departments[3]),
new Employee("Frank", 33, 7000,departments[4]), new Employee("Earl", 43, 10000, departments[2]),
new Employee("Jessica", 23, 4000, departments[1]), new Employee("Pearl", 33, 6000, departments[0]),
new Employee("Pearl", 33, 6000, departments[6]), new Employee("Pearl", 33, 6000, departments[7])
};
final String[] arrOrderDepartment = new String[]{"operations", "Computing", "administration", "Inventory", "Human Resources", "communication", "marketing"};
final List<Employee> employeeList = Arrays.asList(employees);
List<Employee> copyEmployeeList = Arrays.asList(employees);
Collections.sort(copyEmployeeList, new Comparator<Employee>(){
public int compare(Employee o1, Employee o2)
{
String a = getDepartmentOfList(o1.getDepartment().getName(), employeeList);
String b = getDepartmentOfList(o2.getDepartment().getName(), employeeList);
return indexOf(a, arrOrderDepartment) - indexOf(b, arrOrderDepartment);
}
});
System.out.println(copyEmployeeList);
}
private static String getDepartmentOfList(String name, List<Employee> employeeList) {
for (Employee employee: employeeList) {
if (name.equalsIgnoreCase(employee.getDepartment().getName())){
return employee.getDepartment().getName();
}
}
return null;
}
private static int indexOf( String c , String[] arr ) {
for( int i = 0 ; i < arr.length ; i++ ) {
if( arr[i].equalsIgnoreCase(c) ) {
return i;
}
}
return -1;
}
}