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

之前一直在项目中使用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包


        
            com.github.liuzhuoming23
            pinyin4j-spring-boot-starter
            0.0.4
        

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

public static void paixu() {
        List uList = new ArrayList();
        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 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 map2 =   uList.stream().collect(Collectors.groupingBy(User->User.getAge(),Collectors.counting()));
        map2.forEach((k, v) -> System.out.println(k + ":" + v)); 

        // 对于单一数据类型排序
        List intList = new ArrayList();
        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 集合排序小结--后续陆续更新)