一般Java程序里面对于字母数字开头的排序还是很OK的,但是对于汉字,也整Java排序的话,虽然也是排了顺序。
但是那个顺序不是咱们的那个字母表的顺序,这个不合咱们的要求,所以还得按咱们的要求来排序才好。
public interface OrderingConstants {
Collator collator = Collator.getInstance(Locale.CHINA);
/**
* Model为要排序的对象model,如Person,等等类型的自定义model。
*/
Ordering<Model> Model_NAME_ORDERING = new Ordering<Model>() {
@Override
public int compare(Model left, Model right) {
if (left == null || left.getTitle() == null) {
return -1;
}
if (right == null || right.getTitle() == null) {
return 1;
}
return collator.compare(left.getTitle(), right.getTitle());
}
};
}
//调用上面的,来给一个集合,按model的某个字段,排序
//List<Model> allModels = getAllModels()//这个就是获得要排序的集合。
Collections.sort(allModels, OrderingConstants.Model_NAME_ORDERING);
//然后这个allModels集合就排过顺序啦。
//Ordering 这个类是guava包里面的东西
public abstract class Ordering<T> implements Comparator<T> {
。。。。。。
//实现Comparator这个接口。和一般的集合排序自己实现这个接口是一个道理。
// Override to add @Nullable
@Override
public abstract int compare(@Nullable T left, @Nullable T right);
。。。。。。
}
暂时先整个这个guava的这个,改天再整个通用的,只要Java包就可以用的,排序的方法。
现在有如下链接:
说干就干,这个是一般集合的排序的2种实现方式,大师兄亲自做了测试,代码和结果都贴出来啦。伸手党就表谢我拉。
还有个问题,你还不一定遇得到,但是还是建议看一下。如下链接:
有时候你觉得你的代码没问题,但是运行的时候,就异常啦。因为排序对象属性可能都是null,上面代码没考虑这个