List<PageData>    varList =  [{BOMCode=10A, mantotal=4}, {BOMCode=10B, mantotal=1}, {BOMCode=11A, mantotal=1}, {BOMCode=11B, mantotal=1}, {BOMCode=12A, mantotal=1}, {BOMCode=1A, mantotal=9}, {BOMCode=2A, mantotal=168}, {BOMCode=2B, mantotal=57}, {BOMCode=3A, mantotal=440}, {BOMCode=3B, mantotal=363}, {BOMCode=4A, mantotal=317}, {BOMCode=4B, mantotal=612}, {BOMCode=5A, mantotal=175}, {BOMCode=5B, mantotal=188}, {BOMCode=6A, mantotal=99}, {BOMCode=6B, mantotal=132}, {BOMCode=7A, mantotal=48}, {BOMCode=7B, mantotal=58}, {BOMCode=8A, mantotal=22}, {BOMCode=8B, mantotal=10}, {BOMCode=9A, mantotal=7}, {BOMCode=9B, mantotal=3}]

现在要对集合对象里面的BOMCode做排序,返回一个排序后的varList:

Collections.sort(varList, new Comparator<PageData>(){
/*
* int compare(PageData pd1, PageData pd2) 返回一个基本类型的整型,
* 返回负数表示:pd1 小于pd2,
* 返回0 表示:pd1和pd2相等,
* 返回正数表示:pd1大于pd2。
*/
@Override
public int compare(PageData pd1, PageData pd2) {
int number1;
int number2;
int ascii1 = 0;
int ascii2 = 0;
String s1 = pd1.getString("BOMCode");
String s2 = pd2.getString("BOMCode");
// 获取每个数字的最后一位,判断是否为大写字母(判断其ASCII码是否在65到90之间)
if ((int) (s1.toCharArray()[s1.length() - 1]) >= 65
&& (int) (s1.toCharArray()[s1.length() - 1]) <= 90) {
number1 = Integer.parseInt(s1.substring(0,
s1.length() - 1));
ascii1 = (int) (s1.toCharArray()[s1.length() - 1]);
} else {
number1 = Integer.parseInt(s1);
}
if ((int) (s2.toCharArray()[s2.length() - 1]) >= 65
&& (int) (s2.toCharArray()[s2.length() - 1]) <= 90) {
number2 = Integer.parseInt(s2.substring(0,
s2.length() - 1));
ascii2 = (int) (s2.toCharArray()[s2.length() - 1]);
} else {
number2 = Integer.parseInt(s2);
}
// 从小到大排序
if (number1 > number2) {
return 1;
} else if (number1 == number2) {// 数值相等则判断是否有字母以及字母的顺序
// 如果两个都有字母,则判断顺序
// 按ASCII码从小到大排列(即从A到Z排列)
if (ascii1 < ascii2) {
return 1;
}
}
return -1;
}
});
return varList;

最后返回的varList如下:

[{BOMCode=1A, mantotal=9}, {BOMCode=2B, mantotal=57}, {BOMCode=2A, mantotal=168}, {BOMCode=3B, mantotal=363}, {BOMCode=3A, mantotal=440}, {BOMCode=4B, mantotal=612}, {BOMCode=4A, mantotal=317}, {BOMCode=5B, mantotal=188}, {BOMCode=5A, mantotal=175}, {BOMCode=6B, mantotal=132}, {BOMCode=6A, mantotal=99}, {BOMCode=7B, mantotal=58}, {BOMCode=7A, mantotal=48}, {BOMCode=8B, mantotal=10}, {BOMCode=8A, mantotal=22}, {BOMCode=9B, mantotal=3}, {BOMCode=9A, mantotal=7}, {BOMCode=10B, mantotal=1}, {BOMCode=10A, mantotal=4}, {BOMCode=11B, mantotal=1}, {BOMCode=11A, mantotal=1}, {BOMCode=12A, mantotal=1}]

含有对象的List集合实现字母数字混合排序的更多相关文章

  1. 对文本行进行排序,新增-d(目录排序),只对字母数字空格排序(TCPL 练习5-16)

    文本行的排序用到了命令行参数以及多级指针,在要求只对字母数字空格进行排序时,关键的问题点是兼容-f命令参数,也就是排序的同时忽略大小写.由于在之前的练习中,我将忽略大小写的比较方法重新写了一个函数tr ...

  2. PHP实现字母数字混合验证码

    一款简单的PHP实现字母数字混合验证码,支持自定义验证码.验证码图片.宽度.高度.个数.背景图片等 验证码调用地址:Application\Home\Controller\CodeController ...

  3. MYSQL数据库字母数字混合字段排序问题

    对MySQL数据表里的一个字符型字段排序,其内容格式为一位字母+顺序数字.数字没有前导零,长度不固定.这种含字母的数字序列,排序出来的结果和我们想要的结果是不一样的,因为它不是纯数字,只能按字符规则排 ...

  4. mysql如何给字母数字混合的字段排序?

    mysql> select * from t_SpiritInside; +------+ | col  | +------+ | s1   | | s2   | | s11  | | s12  ...

  5. oracle数据库表中,插入数据的时候如何产生一个 字母+数字 编号?

    Oracle 语句中“||”代表什么啊? oracle数据库表中,插入数据的时候如何产生一个 字母+数字 编号? 排序的话,用order by来处理即可.比如:cola123a234b999b335s ...

  6. js 正则 以字母开头必须有 大小写字母数字组成 可以有“@"或 ”.“

    js  正则  以字母开头必须有 大小写字母数字组成 可以有“@"或 ”.“ var reg = /^[a-zA-Z]{1}(?=.*[a-z])(?=.*[A-Z])[a-zA-Z\d_@ ...

  7. js随机生成字母数字组合的字符串 随机动画数字

    效果描述: 附件中只有一个index.html文件有效 其中包含css以及html两部分内容 纯js生成的几个随机数字 每次都不重复,点击按钮后再次切换 使用方法: 1.将css样式引入到你的网页中 ...

  8. 字母数字、字母、汉字验证码 (java)

    原文:http://blog.csdn.net/qh_java/article/details/49854477 一.字母数字,字母,汉字验证码的生成代码 1.字母数字验证码: package com ...

  9. MongoDB学习笔记~自己封装的Curd操作(查询集合对象属性,更新集合对象)

    回到目录 我不得不说,mongodb官方驱动在与.net结合上做的不是很好,不是很理想,所以,我决定对它进行了二次封装,这是显得很必然了,每个人都希望使用简单的对象,而对使用复杂,麻烦,容易出错的对象 ...

随机推荐

  1. Kubernetes组件及网络基础

    在前面的部分了解了Pod的创建删除 ,查看信息等.那么我们怎么去管理Pod呢?我们可以通过 ReplicationController 去管理维护 Pod. Replication Controlle ...

  2. vue vuex应用

    vue结构图: vuex为vue的一个插件,用来管理共享数据的,局部数据声明在自己组件内部. 没有使用vuex时,所有共享数据和操作数据的方法都声明在父组件内,数据的通信用props及pubsub等. ...

  3. 同一台电脑管理多个SSH KEY

    同一台电脑关于多个SSH KEY管理 笔者之前为电脑中的homestead虚拟机配置过id_rsa,但现在因为想在github上搭建基于hexo的博客,所以需要配置github的ssh key,因此产 ...

  4. RabbitMq学习3-工作队列(Work queues)

    工作队列(又称:任务队列——Task Queues)是为了避免等待一些占用大量资源.时间的操作.当我们把任务(Task)当作消息发送到队列中,一个运行在后台的工作者(worker)进程就会取出任务然后 ...

  5. Django中Model进阶操作

    一.字段 AutoField(Field) - int自增列,必须填入参数 primary_key=True BigAutoField(AutoField) - bigint自增列,必须填入参数 pr ...

  6. Python 多列数据存储

    zip()函数 zip函数可以把多个列表相加成一个tuple(元组) a = [1,2,3,4] b = [11,22,33,44] c = [111,222,333,444] A = list(zi ...

  7. 洛谷 - P3803 -【模板】多项式乘法(FFT) - NTT

    https://www.luogu.org/problemnew/show/P3803 看别人偏偏就是要用NTT去过.实验证明大概是这样用.求0~n的多项式和0~m的多项式的乘积.注意MAXN取值.A ...

  8. django基础篇05-Form验证组件

    Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 基本简单的操作: from django im ...

  9. Linux--shell函数--08

    1.函数介绍 为了避免代码的重复使用,我们一般通过函数编写代码块,而这一个代码块用来实现某种功能:且这个功能在后面的代码中会重复使用. 2.函数的语法格式: [ function ] 函数名 [ ( ...

  10. CSS的优先级理解

    样式的优先级 多重样式(Multiple Styles):如果外部样式.内部样式和内联样式同时应用于同一个元素,就是使多重样式的情况. 一般情况下,优先级如下: (外部样式)External styl ...