按字母升序排序 java 中的 bean 对象列表

sort List of bean object in java alphabetically in ascending order

下面是豆子class:

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 class 我试图按升序对 bean 列表进行排序(我的意思是字母顺序):

 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值按字母顺序排序。任何人都可以请建议

第一个使用比较器内联定义的排序实现是正确的。

您会发现在排序的 bean 中,按 "Z"、"a" 和 "b" 的顺序出现。

正在将大写字母 Z 与小写字母 a 和 b 进行比较。因此,排序后的列表是按上面的顺序

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

参考后续。代码片段:

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

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

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

或者,您可以使用第二种方法 (Collections.sort()),其中您不明确提及比较器,同时对集合调用排序。这是可能的,因为 bean class 实现了 comparable 接口。

为了实现 comparable 接口,compareTo 方法必须按如下方式实现:

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

您正在排序 2 次,这比您需要的更多

第一次测试不需要实现可比较...

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 class 应该比较字符串,因为这是排序标准

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 添加多个字段 class,例如:姓氏,或者您可以使用匿名比较器并根据您自己的标准进行排序

姓氏示例:

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());
    }
}