关于实现联系人中英文名排序的问题

今天在做项目时,遇到需要将联系人列表进行排序的问题,联系人列表中有中文,也有英文,而且是通过List<UserItem>的集合,借助Adapter对象展现在listView中。通过查询资料,决定使用Collection(list,Comparator<T>)这个方法进行排序,还有一个必须注意的是,必须重写User的toString()方法,否则比较的是它们的内存地址,下面是我的代码:

Comparator类:

public class MyComparator implements Comparator<Object>{


@Override
public int compare(Object o1, Object o2) {
User User1=(User)o1;
User User2=(User)o2;
Collator collator=Collator.getInstance();

//把字符串转换为一系列比特,它们可以以比特形式与 CollationKeys 相比较
CollationKey key1=collator.getCollationKey(o1.toString());//要想不区分大小写进行比较用o1.toString().toLowerCase()  
CollationKey key2=collator.getCollationKey(o2.toString());

return key1.compareTo(key2);
}
}


User类:

public class User implements Serializable{


/**

*/
private static final long serialVersionUID = 3839176358397765336L;
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return this.name;
}
}


Test类:

public class Test {
public static void main(String[] args) {
List<User> list=new ArrayList<User>();

User user=new User();
user.setName("张三");
user.setId(0);
list.add(user);

User user2=new User();
user2.setName("利斯");
user2.setId(1);
list.add(user2);

User user3=new User();
user3.setName("z三");
user3.setId(3);
list.add(user3);

User user4=new User();
user4.setName("徐斯");
user4.setId(4);
list.add(user4);

User user5=new User();
user5.setName("牛三");
user5.setId(6);
list.add(user5);

User user6=new User();
user6.setName("常斯");
user6.setId(7);
list.add(user6);

User user7=new User();
user7.setName("m三");
user7.setId(8);
list.add(user7);

User user8=new User();
user8.setName("a斯");
user8.setId(9);
list.add(user8);

User user9=new User();
user9.setName("阿斯");
user9.setId(9);
list.add(user9);

User user10=new User();
user10.setName("c斯");
user10.setId(9);
list.add(user10);

User user11=new User();
user11.setName("比斯");
user11.setId(9);
list.add(user11);

User user12=new User();
user12.setName("c斯");
user12.setId(9);
list.add(user12);

User user13=new User();
user13.setName("伯斯");
user13.setId(9);
list.add(user13);

Collections.sort(list, new MyComparator());

System.out.println(list.toString());
}
}


最终得到排序的结果:

[a斯, c斯, c斯, m三, z三, 阿斯, 比斯, 伯斯, 常斯, 利斯, 牛三, 徐斯, 张三]

字母开头的均排在了前面,汉字开头的均列在了后面,目前,这种排序方式是可以满足业务要求的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值