数据库 MySQL 需要排序的字段Name(值有中文有英文)
按照需求需要将结果按照name值由A-Z排序返回
代码:
pojo
...
private String name;
...
SortName 类
import java.text.Collator;
import java.util.Comparator;
public class SortName implements Comparator<User> {
Collator c = Collator.getInstance(java.util.Locale.CHINA);
@Override
public int compare(User u1, User u2) {
if (c.compare(u1.getName(), u2.getName()) > 0) {
return 1;
} else if (c.compare(u1.getName(), u2.getName()) < 0) {
return -1;
} else {
return 0;
}
}
}
排序
//自己查询的结果集
List<User> users = xxxService.findAll(....);
//根据名字排序
Collections.sort(users, new SortName());
//现在users中的对象是根据name来排序的,英文在前,中文在后,按照A-Z的方式排序
测试
//User
public class user implements Serializable{
private String name;
private Integer id;
...
}
// test
@Test
public void fun1() {
User u1 = new User("张三",1);
User u2 = new User("李四",2);
User u3 = new User("王五",3);
List<User> list = new ArrayList<>();
list.add(u1);
list.add(u2);
list.add(u3);
System.out.println("before---"+ list.toString());
Collections.sort(list, new SortName());
System.out.println("after---"+ list.toString());
}
// result
before---[User [name=张三, id=1], User [name=李四, id=2], User [name=王五, id=3]]
after---[User [name=李四, id=2], User [name=王五, id=3], User [name=张三, id=1]]
也可以直接利用sql来查询。
如果字段name是utf-8格式的,在sql语句中可以这样实现包含中文的排序
order by convert(name using gbk) asc
工作中遇到的问题,记录一下。
解决问题感谢以下博客:
对中文名称排序
MySQL按照汉字的拼音排序