含有对象的List集合实现字母数字混合排序
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集合实现字母数字混合排序的更多相关文章
- 对文本行进行排序,新增-d(目录排序),只对字母数字空格排序(TCPL 练习5-16)
文本行的排序用到了命令行参数以及多级指针,在要求只对字母数字空格进行排序时,关键的问题点是兼容-f命令参数,也就是排序的同时忽略大小写.由于在之前的练习中,我将忽略大小写的比较方法重新写了一个函数tr ...
- PHP实现字母数字混合验证码
一款简单的PHP实现字母数字混合验证码,支持自定义验证码.验证码图片.宽度.高度.个数.背景图片等 验证码调用地址:Application\Home\Controller\CodeController ...
- MYSQL数据库字母数字混合字段排序问题
对MySQL数据表里的一个字符型字段排序,其内容格式为一位字母+顺序数字.数字没有前导零,长度不固定.这种含字母的数字序列,排序出来的结果和我们想要的结果是不一样的,因为它不是纯数字,只能按字符规则排 ...
- mysql如何给字母数字混合的字段排序?
mysql> select * from t_SpiritInside; +------+ | col | +------+ | s1 | | s2 | | s11 | | s12 ...
- oracle数据库表中,插入数据的时候如何产生一个 字母+数字 编号?
Oracle 语句中“||”代表什么啊? oracle数据库表中,插入数据的时候如何产生一个 字母+数字 编号? 排序的话,用order by来处理即可.比如:cola123a234b999b335s ...
- js 正则 以字母开头必须有 大小写字母数字组成 可以有“@"或 ”.“
js 正则 以字母开头必须有 大小写字母数字组成 可以有“@"或 ”.“ var reg = /^[a-zA-Z]{1}(?=.*[a-z])(?=.*[A-Z])[a-zA-Z\d_@ ...
- js随机生成字母数字组合的字符串 随机动画数字
效果描述: 附件中只有一个index.html文件有效 其中包含css以及html两部分内容 纯js生成的几个随机数字 每次都不重复,点击按钮后再次切换 使用方法: 1.将css样式引入到你的网页中 ...
- 字母数字、字母、汉字验证码 (java)
原文:http://blog.csdn.net/qh_java/article/details/49854477 一.字母数字,字母,汉字验证码的生成代码 1.字母数字验证码: package com ...
- MongoDB学习笔记~自己封装的Curd操作(查询集合对象属性,更新集合对象)
回到目录 我不得不说,mongodb官方驱动在与.net结合上做的不是很好,不是很理想,所以,我决定对它进行了二次封装,这是显得很必然了,每个人都希望使用简单的对象,而对使用复杂,麻烦,容易出错的对象 ...
随机推荐
- 在centos6.4下安装python3.5
1.安装依赖包 ./configure --prefix=/usr/local/python3.5 --enable-shared make && make install yum g ...
- Python 入门之Python基础知识
Python 入门之Python基础知识 1.变量 (1)变量就是把程序运行的中间结果临时存在内存中,以便后续代码使用 (2)变量的作用: 昵称,就是代指内存中某个地址中的内容 a = 123 变量名 ...
- HNUSTOJ 1601:名字缩写
1601: 名字缩写 时间限制: 1 Sec 内存限制: 128 MB 提交: 288 解决: 80 [提交][状态][讨论版] 题目描述 Noname老师有一个班的学生名字要写,但是他太懒了,想 ...
- HDU 2196 Computer( 树上节点的最远距离 )
Computer Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- 【LGR-063】洛谷11月月赛 I & MtOI2019 Ex Div.2 (A-C)
[MtOI2019]黑蚊子多 : 按题意模拟 #include<iostream> #include<cstdio> #include<cstring> using ...
- Spring boot项目集成Neo4j
第一步,创建Springboot工程 使用Eclipse 创建Maven项目,并修改pom.xml文件为: <?xml version="1.0" encoding=&quo ...
- 2019 NCTF Re WP
0x01 debug 测试文件:https://www.lanzous.com/i7kr2ta 1.Linux运行环境 在Linux上运行linux_server64文件 2.IDA配置 __int6 ...
- es6 generator函数的异步编程
es6 generator函数,我们都知道asycn和await是generator函数的语法糖,那么genertaor怎么样才能实现asycn和await的功能呢? 1.thunk函数 将函数 ...
- #include <xxx.h>和#include "xxx.h"的区别
<>代表在系统目录下查找该头文件(系统定义头文件) ""代表在用户目录下查找该头文件(自定义头文件)
- python利用(threading,ThreadPoolExecutor.map,ThreadPoolExecutor.submit) 三种多线程方式处理 list数据
需求:在从银行数据库中取出 几十万数据时,需要对 每行数据进行相关操作,通过pandas的dataframe发现数据处理过慢,于是 对数据进行 分段后 通过 线程进行处理: 如下给出 测试版代码,通过 ...