在列表上实现字母排序,等于覆盖不可能

时间:2011-03-01 13:42:53

标签: java sorting

我有一个对象列表,可以按字母顺序对属性进行排序。我无法覆盖此对象上的equals方法,因为它是一个生成的类,我的实现将在下一代中被删除。 我想我会在工具箱类中实现这种类型。 有没有办法不重新发明轮子?

4 个答案:

答案 0 :(得分:4)

使用自定义Comparator

class A{
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public A() {
    }

    public A(String name) {
        this.name = name;
    }

}
List<A> aList = new ArrayList<A>();
aList.add(new A("abc"));
aList.add(new A("sda"));
aList.add(new A("aaa"));
Collections.sort(aList,new Comparator<A>() {

            public int compare(A o1, A o2) {
                return o1.getName().compareTo(o2.getName());
            }
});

答案 1 :(得分:2)

类似的东西:

class Foo {
    public String field;
}

public static void main(String[] args) {
    List<Foo> foos = new ArrayList<Foo>();

            ....        

    Collections.sort(foos, new Comparator<Foo>() {
        @Override
        public int compare(Foo o1, Foo o2) {
            return o1.field.compareTo(o2.field);
        }
    });
}

答案 2 :(得分:0)

您可以查看API。您只需要实现比较器来比较您的属性

答案 3 :(得分:0)

您可以使用比较器,我们说您正在使用字母名称(myList)对Person的列表(getName())进行排序。

List<Person> myList = new ArrayList<Person>(keys);
Collections.sort(myList, new Comparator<Person>() {
  @Override
  public int compare(Person p1, Person p2) {
    String s1 = p1.getName();
    String s2 = p2.getName();
    return s1.compareTo(s2);
  }     
});