在开发中,有些时候我们要对一个集合中的对象的某个属性进行按拼音排序,便于更快的找到汉字,我采用Comparator接口,在实现这个接口里定义排序规则,取得比较对象的汉字编码,并将其转换成字符串,运用String类的compareTo()方法对两对象进行比较。说了这么多,怎么还不贴代码啊。。。
一,建一个要排序的对象实体类ProvinceVO。
/*
* Copyright The JA-SIG Collaborative. All rights reserved.
* distributed with this file and available online at
* /
*/
package snippet;
import java.io.Serializable;
/**
* 要排序的对象实体类
*
* @author 甘维彬 Exp
* @version $FileName: ProvinceVO.java $Date: -3-27 下午2:11:06 -0400
* @since 1.0
*
*/
public class ProvinceVO implements Serializable {
private static final long serialVersionUID = -6808503832740453598L;
/**
* 标识
*/
private String id;
/**
* 名称
*/
private String name;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
二,建一个比较器类PinYinComparator。
/*
* Copyright The JA-SIG Collaborative. All rights reserved.
* distributed with this file and available online at
* /
*/
package snippet;
import parator;
/**
*
* @author 甘维彬 Exp
* @version $FileName: descClass.java $Date: -3-27 下午2:26:42 -0400
* @since 1.0
*
*/
public class PinYinComparator implements Comparator {
/**
* 实现接口里的一个方法,实现比较条件
* 取得比较对象的汉字编码,并将其转换成字符串
*/
@Override
public int compare(ProvinceVO arg1, ProvinceVO arg2) {
try {
String str1 = new String(arg2.getName().getBytes("GB2312"), "ISO-8859-1");
String str2 = new String(arg1.getName().getBytes("GB2312"), "ISO-8859-1");
return pareTo(str1);
} catch (Exception e) {
return 0;
}
}
}
三,这就是测试类了Test.
/*
* Copyright The JA-SIG Collaborative. All rights reserved.
* distributed with this file and available online at
* /
*/
package snippet;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
*
* @author 甘维彬 Exp
* @version $FileName: Snippet.java $Date: -3-27 下午1:49:24 -0400
* @since 1.0
*
*/
public class Test {
/**
*
* 运用Collections的sort()方法对其进行排序 sort()方法需要传 连个参数,一个是需要进行排序的Collection
* 另一个是一个Comparator,这里是打印成两行,可以做相应的比较
*
* @param args
*/
public static void main(String[] args) {
List provinceList = new ArrayList();
setProvinceList(provinceList);
for (ProvinceVO key : provinceList) {
System.out.print(key.getName() + ",");
}
System.out.println();
Collections.sort(provinceList, new PinYinComparator());
for (ProvinceVO key : provinceList) {
System.out.print(key.getName() + ",");
}
}
/**
* 准备对象数据集合
*
* @param provinceList
*/
private static void setProvinceList(List provinceList) {
ProvinceVO provinceVO = new ProvinceVO();
provinceVO.setName("南昌市");
provinceList.add(provinceVO);
ProvinceVO provinceVO1 = new ProvinceVO();
provinceVO1.setName("九江市");
provinceList.add(provinceVO1);
ProvinceVO provinceVO2 = new ProvinceVO();
provinceVO2.setName("新余市");
provinceList.add(provinceVO2);
ProvinceVO provinceVO3 = new ProvinceVO();
provinceVO3.setName("鹰潭市");
provinceList.add(provinceVO3);
ProvinceVO provinceVO4 = new ProvinceVO();
provinceVO4.setName("赣州市");
provinceList.add(provinceVO4);
ProvinceVO provinceVO5 = new ProvinceVO();
provinceVO5.setName("抚州市");
provinceList.add(provinceVO5);
ProvinceVO provinceVO6 = new ProvinceVO();
provinceVO6.setName("上饶市");
provinceList.add(provinceVO6);
ProvinceVO provinceVO7 = new ProvinceVO();
provinceVO7.setName("萍乡市");
provinceList.add(provinceVO7);
ProvinceVO provinceVO8 = new ProvinceVO();
provinceVO8.setName("宜春市");
provinceList.add(provinceVO8);
ProvinceVO provinceVO9 = new ProvinceVO();
provinceVO9.setName("景德镇市");
provinceList.add(provinceVO9);
ProvinceVO provinceVO10 = new ProvinceVO();
provinceVO10.setName("吉安市");
provinceList.add(provinceVO10);
}
}
结果就可以看到相应的变化了。
南昌市,九江市,新余市,鹰潭市,赣州市,抚州市,上饶市,萍乡市,宜春市,景德镇市,吉安市,
抚州市,赣州市,吉安市,景德镇市,九江市,南昌市,萍乡市,上饶市,新余市,宜春市,鹰潭市,
~~~~~~~~~~~~~~~~
文笔不好,见笑了@~~@..