关于比较器:按字母顺序按升序排序java中bean对象的列表

sort List of bean object in java alphabetically in ascending order

本问题已经有最佳答案,请猛点这里访问。

下面是bean类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class bean  {
    private String Name;

    public String getName() {
        return Name;
    }

    public void setName(String name) {
        Name = name;
    }



    @Override
    public String toString() {
        return"bean [Name=" + Name +"]";
    }
}

下面是我的Java类,我试图按升序排序bean的列表(我是按字母顺序排列):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 public class Test{
    public static void main(String[] args) {
        bean b1 = new bean();
        bean b2 = new bean();
        bean b3 = new bean();
        List<bean> beanList = new ArrayList<bean>();
        b1.setName("b");
        b2.setName("a");
        b3.setName("Z");
        beanList.add(b1);
        beanList.add(b2);
        beanList.add(b3);

    }
}

我不能像a,b,z这样按字母顺序对bean值进行排序,有人能给我建议吗?


你要分类2次,这是你所需要的

第一个测试不需要实现可比较的…

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Test  {
    public static void main(String[] args) {
        Bean b1 = new Bean();
        Bean b2 = new Bean();
        Bean b3 = new Bean();
        List<Bean> beanList = new ArrayList<Bean>();
        b1.setName("b");
        b2.setName("a");
        b3.setName("Z");
        beanList.add(b1);
        beanList.add(b2);
        beanList.add(b3);

        Collections.sort(beanList);
        System.out.println("finally" + beanList);
    }
}

bean类应该比较字符串,因为这是排序标准

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class Bean implements Comparable<Bean> {
    private String Name;

    public String getName() {
        return Name;
    }

    public void setName(String name) {
        Name = name;
    }

    @Override
    public String toString() {
        return"bean [Name=" + Name +"]";
    }

    @Override
    public int compareTo(Bean o) {
        return o.getName().compareTo(this.getName());
    }
}

编辑:

当然,您可以向bean类添加多个字段,例如:lastname或者您可以使用匿名的comparator并使用yoor自己的条件进行排序。

姓氏示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public class Bean implements Comparable<Bean> {
    private String name;
    private String lastName;

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getName() {
        return name;
    }

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

    @Override
    public String toString() {
        return"Bean [name=" + name +", lastName=" + lastName +"]";
    }

    @Override
    public int compareTo(Bean o) {
        return this.getName().compareTo(o.getName());
    }
}


使用comparator的内联定义的sort的第一个实现是正确的。

您会发现,在排序后的bean中,出现的顺序是"z"、"a"和"b"。

大写字母Z与小写字母A和B进行比较。因此,排序后的列表按上面的顺序排列。

如果希望比较不区分大小写,可以在比较之前对两个字符串都使用tolowercase

参考FoLL。代码片段:

1
2
3
4
5
Collections.sort(beanList, new Comparator<bean>() {
                public int compare(final bean object1, final bean object2) {
                    return object1.getName().toLowerCase().compareTo(object2.getName().toLowerCase());
                }
            });

您也可以使用compareToIgnoreCase()方法,如下所示:

1
2
3
4
5
Collections.sort(beanList, new Comparator<bean>() {
                public int compare(final bean object1, final bean object2) {
                    return object1.getName().compareToIgnoreCase(object2.getName());
                }
            });

或者,您可以使用第二个方法(collections.sort(),在这里您不显式地提到comparator,而对集合调用sort。这是可能的,因为bean类实现了comparable接口。

为了实现comparable接口,CompareTo方法必须实现如下:

1
2
3
4
@Override
public int compareTo(bean o) {
    return this.Name.compareToIgnoreCase(o.Name);
}