使用下面的代码。但它以对象形式给出响应而不是String。让我知道我哪里错了......
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]
答案 0 :(得分:1)
您需要在Employee5中实现一个名为toString()
的方法,该方法返回名称。
例如(添加到Employee5)
public String toString() {
return name;
}
答案 1 :(得分:0)
看来,您应该在Employee5类中拥有自己的toString()实现,以指定如何打印它们:
class Employee5 {
...
@Override
public String toString() {
return name;
}
}
答案 2 :(得分:0)
当您打印列表时,将调用列表的toString()方法,该方法通过调用所包含对象的toString()方法来打印内容。您需要覆盖Employee5类中的toString()方法并从中返回名称。
答案 3 :(得分:0)
Iterator itr = lst.iterator();
while(itr.hasNext()) {
Employee5 element = (Employee5) itr.next();
System.out.print(element.getName());
}
希望这有助于。