当前位置 博文首页 > 文章内容

    Comparable和Comparator

    作者: 栏目:未分类 时间:2020-09-26 14:00:01

    本站于2023年9月4日。收到“大连君*****咨询有限公司”通知
    说我们IIS7站长博客,有一篇博文用了他们的图片。
    要求我们给他们一张图片6000元。要不然法院告我们

    为避免不必要的麻烦,IIS7站长博客,全站内容图片下架、并积极应诉
    博文内容全部不再显示,请需要相关资讯的站长朋友到必应搜索。谢谢!

    另祝:版权碰瓷诈骗团伙,早日弃暗投明。

    相关新闻:借版权之名、行诈骗之实,周某因犯诈骗罪被判处有期徒刑十一年六个月

    叹!百花齐放的时代,渐行渐远!



    
    import lombok.Builder;
    import lombok.Data;
    
    import java.io.Serializable;
    
    /**
     * @描述 :
     * @作者 fangdayang
     * @date 2020/9/26 12:43
     */
    @Data
    @Builder
    public class Person implements Comparable<Person>, Serializable {
        private static final long serialVersionUID = 5463826748719272438L;
        /**
         * 姓名
         */
        private String name;
        /**
         * 年龄
         */
        private Integer age;
        /**
         * 性别
         */
        private String gender;
    
        public Person() {
        }
    
        public Person(String name, Integer age, String gender) {
            this.name = name;
            this.age = age;
            this.gender = gender;
        }
    
        @Override
        public int compareTo(Person o) {
            int i = this.getAge() - o.getAge();
            return -i;
        }
    }
    
    
    
    import net.sourceforge.pinyin4j.PinyinHelper;
    import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
    import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
    import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
    import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;
    import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
    
    public class PinyinUtils {
        /**
         * 将汉字转换为全拼
         *
         * @param src
         * @return String
         */
        public static String getPinYin(String src) {
            char[] t1 = null;
            t1 = src.toCharArray();
            String[] t2 = new String[t1.length];
            // 设置汉字拼音输出的格式
            HanyuPinyinOutputFormat t3 = new HanyuPinyinOutputFormat();
            t3.setCaseType(HanyuPinyinCaseType.LOWERCASE);
            t3.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
            t3.setVCharType(HanyuPinyinVCharType.WITH_V);
            String t4 = "";
            int t0 = t1.length;
            try {
                for (int i = 0; i < t0; i++) {
                    // 判断是否为汉字字符
                    if (Character.toString(t1[i]).matches("[\\u4E00-\\u9FA5]+")) {
                        t2 = PinyinHelper.toHanyuPinyinStringArray(t1[i], t3);// 将汉字的几种全拼都存到t2数组中
                        t4 += t2[0];// 取出该汉字全拼的第一种读音并连接到字符串t4后
                    } else {
                        // 如果不是汉字字符,直接取出字符并连接到字符串t4后
                        t4 += Character.toString(t1[i]);
                    }
                }
            } catch (BadHanyuPinyinOutputFormatCombination e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return t4;
        }
    
        /**
         * 提取每个汉字的首字母
         *
         * @param str
         * @return String
         */
        public static String getPinYinHeadChar(String str) {
            String convert = "";
            for (int j = 0; j < str.length(); j++) {
                char word = str.charAt(j);
                // 提取汉字的首字母
                String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(word);
                if (pinyinArray != null) {
                    convert += pinyinArray[0].charAt(0);
                } else {
                    convert += word;
                }
            }
            return convert;
        }
    
        /**
         * 将字符串转换成ASCII码
         *
         * @param cnStr
         * @return String
         */
        public static String getCnASCII(String cnStr) {
            StringBuffer strBuf = new StringBuffer();
            // 将字符串转换成字节序列
            byte[] bGBK = cnStr.getBytes();
            for (int i = 0; i < bGBK.length; i++) {
                // 将每个字符转换成ASCII码
                strBuf.append(Integer.toHexString(bGBK[i] & 0xff) + " ");
            }
            return strBuf.toString();
        }
    
    }
    
            <!--加入如下:拼音的jar包-->
            <dependency>
                <groupId>com.belerweb</groupId>
                <artifactId>pinyin4j</artifactId>
                <version>2.5.1</version>
            </dependency>
    
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Comparator;
    import java.util.Random;
    
    /**
     * @描述 :Comparable和Comparator
     * @作者 fangdayang
     * @date 2020/9/26 13:04
     */
    public class MainComparable {
    //    public static char[] chars=
    //            {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
        public static void main(String[] args) {
            ArrayList<Person> list = new ArrayList<>();
            for (int i = 0; i < 10; i++) {
                Person p1 = new Person("小明" + i, 30 + i, new Random().nextInt(2) == 1 ? "男" : "女");
                list.add(p1);
            }
            Random random = new Random();
            System.out.println(random.nextInt(2));
            Collections.sort(list);
            // person对象已经实现了根据age的排序 这里增加了对gender的排序
            Collections.sort(list, new Comparator<Person>() {
                @Override
                public int compare(Person o1, Person o2) {
                    String gender = o1.getGender();
                    String pinYin = PinyinUtils.getPinYin(gender);
                    System.out.println(pinYin);
                    String gender1 = o2.getGender();
                    String pinYin1 = PinyinUtils.getPinYin(gender1);
                    System.out.println(pinYin1);
                    char[] pinyinChars = pinYin.toCharArray();
                    char[] pinyinChars2= pinYin1.toCharArray();
                    int length = pinyinChars.length;
                    int length2 = pinyinChars2.length;
                    int lim = length2 - length>0?length:length2;
                    int k = 0;
                    while (k < lim) {
                        char c1 = pinyinChars[k];
                        char c2 = pinyinChars2[k];
                        if (c1 != c2) {
                            return c1 - c2;
                        }
                        k++;
                    }
                    return length - length2;
                }
            });
            list.stream().forEach(person-> System.out.println(person));
    //
    //        char a = 'a';
    //        int i = a + 1;
    //        System.out.println(((char) i));
    //        StringBuilder builder = new StringBuilder("'a',");
    //        for (int j = 1; j <= 26; j++) {
    //            builder.append("'"+((char) (a + j))+"',");
    //        }
    //        System.out.println(builder);
        }
    }