含有对象的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}]
时间: 2024-10-20 21:18:40

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

汉字和数字混合排序

最近需要实现汉字和数字混合排序的功能,但在网上找了好久,没有找到合适的.比如 需要将下面的 数据排序:"测试1,测试20,测试10,测试2".用网络上别人写的算法去排序 ,最终得到的结果是:测试1,测试10,测试2,测试20.但这个结果并不是我想要的,我需要的是 汉字和数字混合排序,汉字按照首字母排列,数字也需要按照从小到大排序.所以希望得到的实际结果应该是:测试1,测试2,测试10,测试20. 既然网络上没有合适的算法,那就只好自己写了.最终只找到一个比较 搓的办法,但还是能实现 汉

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

对MySQL数据表里的一个字符型字段排序,其内容格式为一位字母+顺序数字.数字没有前导零,长度不固定.这种含字母的数字序列,排序出来的结果和我们想要的结果是不一样的,因为它不是纯数字,只能按字符规则排.结果是A1,A10,A11,A12....A19,A2,A20,A21....而不是我们通常感觉中的A1,A2,A3,.....A10,A11,这样的结果.想要得到正确的排序有两个办法.一是改变字段内容结构,在数字前加上零,让所有的字段值拥有相同的长度.二是不改变字段内容,在排序的SQL语句上想办

中文,字母,数字混合验证码

/// 产生随机的混合编码-使用文字,字母,数字混合        /// </summary>        /// <param name="mixLength"></param>        /// <returns></returns>        private string GetRndMix(int mixLength)        {            String Vchar = "0,1

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

Oracle 语句中"||"代表什么啊? oracle数据库表中,插入数据的时候如何产生一个 字母+数字 编号? 排序的话,用order by来处理即可.比如:cola123a234b999b335select * from tablename order by col; 结果就是 cola123a234b335b999 如果按倒序排列:select * from tablename order by col desc; 结果就是 colb999b335a234a123 其他回答 先创

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

js  正则  以字母开头必须有 大小写字母数字组成 可以有“@"或 ”.“ var reg = /^[a-zA-Z]{1}(?=.*[a-z])(?=.*[A-Z])[a-zA-Z\[email protected]\.]{6,16}$/; var v = reg.test(str);     alert(v); //校验是否全由数字组成 function isDigit(s) { var patrn=/^[0-9]{1,20}$/; if (!patrn.exec(s)) return fa

字母数字下划线常用正则表达式

1.由数字.26个英文字母或者下划线组成的字符串:    ^[0-9a-zA-Z_]{1,}$2.非负整数(正整数 + 0 ):    ^/d+$3. 正整数:    ^[0-9]*[1-9][0-9]*$4.非正整数(负整数 + 0):    ^((-/d+)|(0+))$5. 负整数 :    ^-[0-9]*[1-9][0-9]*$6.整数:        ^-?/d+$7.非负浮点数(正浮点数 + 0):    ^/d+(/./d+)?$8.正浮点数 :    ^(([0-9]+/.[0

js判断输入字符串长度(汉字算两个字符,字母数字算一个):例如 要求输入12的字,24个字节

<html> <head> <title>js判断输入字符串长度(汉字算两个字符,字母数字算一个)</title> <style type="text/css"> .pbt { margin-bottom: 10px; } .ie6 .pbt .ftid a, .ie7 .pbt .ftid a { margin-top: 1px; } .cl:after { clear: both; content: ".&quo

字母数字排序

字母数字排序 层次结构窗口中对象的顺序可以更改为字母数字顺序.在菜单栏中,选择编辑>首选项在Windows或统一>首选项在OS X中启动首选项窗口.勾选启用字母数字排序. 如果选中该选项,图标将出现在层次窗口的右上角,让您之间切换转换排序(默认值)或字母排序. 原文地址:https://www.cnblogs.com/kubll/p/10801409.html

Python--基本的对象类型(集合)

以下方法均在python解释器中进行了测试,读者复制代码时,记得去掉注释符. #!/usr/bin/env python # -*- coding: utf-8 -*- # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! # 第一类集合:可变集合 # ******************通过set类创建的对象****************** # 1:集合的格式:使用大括号 { } 或者 set() 函数创建