转载自:
http://amcucn.iteye.com/blog/270697
作者:面向对象
近日工作当中需要将一些数据按一定的格式进行排序,而这些数据是从数据库当中查询出来的一些对象的某个属性,无法按此属性进行排序查询。为此想到将对象取出后再将对其按某格式进行排序,这就需要运用到对集合进行排序。经高人指点,发现以下方法比较好用,特记下一笔。
- /**
- * 根据分类得到与分类相关的所有品牌信息
- */
- private Collection getBrandByType(Integer typeId) {
- String hql = "select distinct pt.box.productInfo.brand From ProductTop As pt where pt.box.productInfo.type.id=" + typeId ;
- List allBrandList = utilDao.executeQuery(hql);
- //对集合进行排序
- Collections.sort(allBrandList, new compareList() );
- return allBrandList;
- }
- /**
- * 比较两个对象的大小,实现Comparator接口
- */
- private class compareList implements Comparator{
- public int compare(Object o1, Object o2) {
- Catagory c1 = (Catagory)o1;
- Catagory c2 = (Catagory)o2;
- String catagoryName1 = c1.getName();
- String catagoryName2 = c2.getName();
- //通过比较两个字符串对象来排序。此处可以根据自己的需要写两个对象的具体比较内容
- return catagoryName1.compareTo(catagoryName2);
- }
- }
/** * 根据分类得到与分类相关的所有品牌信息 */ private Collection getBrandByType(Integer typeId) { String hql = "select distinct pt.box.productInfo.brand From ProductTop As pt where pt.box.productInfo.type.id=" + typeId ; List allBrandList = utilDao.executeQuery(hql); //对集合进行排序 Collections.sort(allBrandList, new compareList() ); return allBrandList; } /** * 比较两个对象的大小,实现Comparator接口 */ private class compareList implements Comparator{ public int compare(Object o1, Object o2) { Catagory c1 = (Catagory)o1; Catagory c2 = (Catagory)o2; String catagoryName1 = c1.getName(); String catagoryName2 = c2.getName();//通过比较两个字符串对象来排序。此处可以根据自己的需要写两个对象的具体比较内容 return catagoryName1.compareTo(catagoryName2); } }
大致步骤如下:
首先通过一般的查询得到一组对象集合此处为:allBrandList 。然后使用Collections.sort方法进行排序,在这个方法当中需要一个实现了Comparator接口的类用来比较两个对象大小。
至于两个对象的大小如何比较,是由自己来定义的,此处只使用了String类当中的compareTo方法,也就是Java当中已定义好了的字符比较方法。如果我们有自己的特别需要,则需要自己重写此方法。
关键的代码: