0

使用下面的代码。但它以对象形式而不是字符串形式给出响应。让我知道我错在哪里...

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

class Employee5 {

    String name;

    public String getName() {
        // TODO Auto-generated method stub
        return name.toString();
    }

    void setName(String nameOfEmp) {
        name = nameOfEmp;
    }

}

class EmpSortByName implements Comparator<Employee5> {
    public int compare(Employee5 o1, Employee5 o2) {
        return o1.getName().compareTo(o2.getName());
    }
}

public class ComparatorExampleInJava {
    @SuppressWarnings("unchecked")
    public static void main(String[] args) {
        Employee5 emp1 = new Employee5();
        emp1.setName("A");
        Employee5 emp2 = new Employee5();
        emp2.setName("C");
        Employee5 emp3 = new Employee5();
        emp3.setName("B");

        List lst = new ArrayList();
        lst.add(emp1);
        lst.add(emp2);
        lst.add(emp3);

        System.out.println("Before Sort : " + lst);

        try {
            Collections.sort(lst, new EmpSortByName());
        } catch (Exception e) {
            e.printStackTrace();
        }

        System.out.println("After Sort  : " + lst);

    }
}

获取输出:排序前:[Employee5@19821f,Employee5@addbf1,Employee5@42e816] 排序后:[Employee5@19821f,Employee5@42e816,Employee5@addbf1]

期望的输出:排序前:[A,C,B] 排序后:[A,B,C]

4

4 回答 4

1

您需要实现一个toString()在 Employee5 中调用的方法,该方法返回名称。

例如(添加到 Employee5 )

public String toString() {
    return name;
}

并进一步阅读:如何在 Java 中使用 toString 方法?

于 2013-08-07T08:00:32.423 回答
0
   Iterator itr = lst.iterator();
    while(itr.hasNext()) {
     Employee5 element = (Employee5) itr.next();
     System.out.print(element.getName());
  }  

希望这可以帮助。

于 2013-08-07T09:01:22.657 回答
0

看来,您应该在 Employee5 类中拥有自己的 toString() 实现,以便指定如何打印它们:

class Employee5 {
    ...

    @Override
    public String toString() {
      return name;
    }

}
于 2013-08-07T08:03:07.067 回答
0

打印列表时,将调用列表的 toString() 方法,该方法通过调用包含对象的 toString() 方法打印内容。您需要覆盖 Employee5 类中的 toString() 方法并从中返回名称。

于 2013-08-07T08:03:42.173 回答