簡體   English   中英

使用比較器在Java中進行自定義排序

[英]Customized sorting in java using comparator

我有

List<Employee> empList = new ArrayList<Employee>();

        empList.add(new Employee(1, "Arasad", "Paju", "Engineer", 60000.09));
        empList.add(new Employee(23, "Cavi", "Qeja", "Doctor", 8000.89));
        empList.add(new Employee(9, "Darthik", "Sumar", "Surgeon", 2000.23));
        empList.add(new Employee(92, "Bamsi", "Rrishna", "Analyst", 2300.12));
        empList.add(new Employee(12, "Gakesh", "Zotla", "Farmer", 6000.45));

        // Sorting on name and firstname
         Collections.sort(empList,new NameComparator());
        for (Employee e : empList) {
            System.out.println("Sort based on name" + " " + e.getPersno()
                    + " " + e.getName() + " " + e.getFirstname() + " "
                    + e.getFunction() + " " + e.getWage());

        }
    }

我想根據名字和名字排序,在我的比較器類中,我這樣做

public class NameComparator implements Comparator<Employee> {   

// Customize sorting

@Override
public int compare(Employee e1, Employee e2) {

    return e2.getName().compareToIgnoreCase(e1.getName()) & e2.getFirstname().compareToIgnoreCase(e1.getFirstname());

}

在我的輸出中,它沒有正確排序

here is my output

Sort based on name&firstname 12 Gakesh Zotla Farmer 6000.45
Sort based on name&firstname 9 Darthik Sumar Surgeon 2000.23
Sort based on name&firstname 23 Cavi Qeja Doctor 8000.89
Sort based on name&firstname 92 Bamsi Rrishna Analyst 2300.12
Sort based on name&firstname  1 Arasad Paju Engineer 60000.09

我的代碼有什么問題嗎?

是:

試試這個:

@Override
public int compare(Employee e1, Employee e2) {
    int result = e1.getName().compareToIgnoreCase(e2.getName()); // reverse order
    if (result == 0) { // their names are equals
        result = e1.getFirstname().compareToIgnoreCase(e2.getFirstname()); // reverse order
    }
    return  result;
}

&是按位運算符,請勿將其與&&混淆。

編輯:

它打印

Sort based on name&firstname 1 Arasad Paju Engineer 60000.09
Sort based on name&firstname 92 Bamsi Rrishna Analyst 2300.12
Sort based on name&firstname 23 Cavi Qeja Doctor 8000.89
Sort based on name&firstname 9 Darthik Sumar Surgeon 2000.23
Sort based on name&firstname 12 Gakesh Zotla Farmer 6000.45

這是代碼,

class Employee {
    private Integer persno;
    private String name;
    private String FirstName;
    private String function;
    private Double wage;


    public Employee(Integer persno, String name, String firstName,String function, Double wage) {
        super();
        this.persno = persno;
        this.name = name;
        FirstName = firstName;
        this.function = function;
        this.wage = wage;
    }

    public Integer getPersno() {
        return persno;
    }
    public void setPersno(Integer persno) {
        this.persno = persno;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getFirstName() {
        return FirstName;
    }
    public void setFirstName(String firstName) {
        FirstName = firstName;
    }
    public String getFunction() {
        return function;
    }
    public void setFunction(String function) {
        this.function = function;
    }
    public Double getWage() {
        return wage;
    }
    public void setWage(Double wage) {
        this.wage = wage;
    }

    @Override
    public String toString(){
        return this.getPersno()+ " " + this.getName() + " " + this.getFirstName() + " "   + this.getFunction() + " " + this.getWage();
    }

    @Override
    public boolean equals(Object obj){
        if(this.getPersno().equals(((Employee)obj).getPersno()))
                return true;
        else
            return false;
    }
}

class NameComparator implements Comparator<Employee>{

    @Override
    public int compare(Employee o1, Employee o2) {
        return o2.getName().compareToIgnoreCase(o1.getName());
    }
}


List<Employee> empList = new ArrayList<Employee>();

    empList.add(new Employee(1, "Arasad", "Paju", "Engineer", 60000.09));
    empList.add(new Employee(23, "Cavi", "Qeja", "Doctor", 8000.89));
    empList.add(new Employee(9, "Darthik", "Sumar", "Surgeon", 2000.23));
    empList.add(new Employee(92, "Bamsi", "Rrishna", "Analyst", 2300.12));
    empList.add(new Employee(12, "Gakesh", "Zotla", "Farmer", 6000.45));

    Collections.sort(empList, new NameComparator());

    for(Employee emp:empList){
        System.out.println("Sort based on name" + " "+emp.toString());
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM