按字母升序排序 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());
}
}
下面是豆子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());
}
}