美文网首页
java List 集合排序小结--后续陆续更新

java List 集合排序小结--后续陆续更新

作者: 囝囝123 | 来源:发表于2020-07-10 16:53 被阅读0次

    之前一直在项目中使用List 的排序,或者一些其他的用法,今天总结一下。做个记录

    一、创建一个实体类

    项目的实际应用中用的比较多的是在一些实体类的集合中,进行一些比较或者排序。

    public class User {
        private int age;
        private String name;
        private String paixu;
        public User(int age, String name) {
            super();
            this.age = age;
            this.name = name;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getPaixu() {
            return paixu;
        }
        public void setPaixu(String paixu) {
            this.paixu = paixu;
        }
        @Override
        public String toString() {
            return "User [age=" + age + ", name=" + name + ", paixu=" + paixu + "]";
        }
    

    二、创建一个简单的运行方法

    1.一般使用 数字 直接比较的时候 比较简单,两者比较大小就可以。但是对于汉字之类的比较,我通常的做法是,用一个字段存储汉字的首字母,这样直接按照汉字的字母进行比较就可以。下面是一个提取汉字首字母的方法

    /**
         * 提取每个汉字的首字母
         * 
         * @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;
        }
    

    2.使用的jar包

    <!-- https://mvnrepository.com/artifact/com.github.liuzhuoming23/pinyin4j-spring-boot-starter -->
            <dependency>
                <groupId>com.github.liuzhuoming23</groupId>
                <artifactId>pinyin4j-spring-boot-starter</artifactId>
                <version>0.0.4</version>
            </dependency>
    

    3.记录一下示例代码
    代码中使用了 java 8 的 新特性 lambda 表达式,好处:使代码简单紧凑。

    public static void paixu() {
            List<User> uList = new ArrayList<User>();
            uList.add(new User(12, "张三"));
            uList.add(new User(13, "李四"));
            uList.add(new User(10, "王五"));
            uList.add(new User(89, "赵柳"));
            uList.add(new User(1, "苟牧"));
            uList.add(new User(24, "狗子"));
    
            // 获取名字的每一个汉字的首字母 其实如果用汉字来排序的话都可以使用此方法
            uList.forEach(e -> e.setPaixu(Pinyin4jUtil.getPinYinHeadChar(e.getName())));
    
            // 按照年龄升序
            uList.sort((User u1, User u2) -> u1.getAge() - u2.getAge());
            System.out.println("按照年龄升序==" + uList.toString());
    
            // 按照年龄降序
            uList.sort((User u1, User u2) -> u2.getAge() - u1.getAge());
            System.out.println("按照年龄降序==" + uList.toString());
    
            // 按照姓名 升序
            uList.sort((User u1, User u2) -> u1.getPaixu().compareTo(u2.getPaixu()));
            System.out.println("按照姓名 升序==" + uList.toString());
    
            // 按照姓名降序
            uList.sort((User u1, User u2) -> u2.getPaixu().compareTo(u1.getPaixu()));
            System.out.println("按照姓名降序==" + uList.toString());
    
    //判断是否存在重复值
            Map<Object, Long> map = uList.stream().collect(Collectors.groupingBy(User -> User.getName(),Collectors.counting()));
            map.forEach((k, v) -> {
                if (v > 1) {
                    buffer.append(k+",");
                }
            });
            System.out.println("存在重复的值:"+buffer);
            
            Map<Object, Long> map2 =   uList.stream().collect(Collectors.groupingBy(User->User.getAge(),Collectors.counting()));
            map2.forEach((k, v) -> System.out.println(k + ":" + v)); 
    
            // 对于单一数据类型排序
            List<Integer> intList = new ArrayList<Integer>();
            intList.add(1);
            intList.add(231);
            intList.add(123);
            intList.add(111);
            intList.add(123441);
            intList.add(2231);
            intList.add(11);
            // 默认排序升序
            intList.sort(null);
                    //也可以使用这个
            intList.sort((a, b) -> a - b);
            System.out.println("升序==" + intList.toString());
            // 降序排序
            intList.sort((a, b) -> b - a);
            System.out.println("降序==" + intList.toString());
            // 获取 大于100的数量
            long num = intList.stream().filter(e -> e > 100).count();
            System.out.println("年龄大于100的数量:" + num);
        }
    

    4.运行结果

        public static void main(String[] args) {
            paixu();
        }
    
    按照年龄升序==[User [age=1, name=苟牧, paixu=gm], User [age=10, name=王五, paixu=ww], User [age=12, name=张三, paixu=zs], User [age=13, name=李四, paixu=ls], User [age=24, name=狗子, paixu=gz], User [age=89, name=赵柳, paixu=zl]]
    按照年龄降序==[User [age=89, name=赵柳, paixu=zl], User [age=24, name=狗子, paixu=gz], User [age=13, name=李四, paixu=ls], User [age=12, name=张三, paixu=zs], User [age=10, name=王五, paixu=ww], User [age=1, name=苟牧, paixu=gm]]
    按照姓名 升序==[User [age=1, name=苟牧, paixu=gm], User [age=24, name=狗子, paixu=gz], User [age=13, name=李四, paixu=ls], User [age=10, name=王五, paixu=ww], User [age=89, name=赵柳, paixu=zl], User [age=12, name=张三, paixu=zs]]
    按照姓名降序==[User [age=12, name=张三, paixu=zs], User [age=89, name=赵柳, paixu=zl], User [age=10, name=王五, paixu=ww], User [age=13, name=李四, paixu=ls], User [age=24, name=狗子, paixu=gz], User [age=1, name=苟牧, paixu=gm]]
    升序==[1, 11, 111, 123, 231, 2231, 123441]
    降序==[123441, 2231, 231, 123, 111, 11, 1]
    年龄大于100的数量:5
    
    

    相关文章

      网友评论

          本文标题:java List 集合排序小结--后续陆续更新

          本文链接:https://www.haomeiwen.com/subject/pqmmcktx.html