Java8利用stream流实现数字排序和中文排序(包括升降序)

时间:2021-03-31 14:07:47   收藏:0   阅读:647

代码部分

利用stream的sorted()进行实现中文排序和数字排序(包括降序和升序),非常简单。


import java.text.Collator;
import java.util.*;
import java.util.stream.Collectors;

public class Demo {
    static class Student {//只是为了方便演示

        private Integer id;
        private String name;
        private String grade;

        public String getGrade() {
            return grade;
        }

        public void setGrade(String grade) {
            this.grade = grade;
        }

        public Integer getId() {
            return id;
        }

        public void setId(Integer id) {
            this.id = id;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public Student(Integer id, String name, String grade) {
            this.id = id;
            this.name = name;
            this.grade = grade;
        }

        @Override
        public String toString() {
            return "Student{" +
                    "id=" + id +
                    ", name=‘" + name + ‘\‘‘ +
                    ", grade=‘" + grade + ‘\‘‘ +
                    ‘}‘;
        }
    }
    public static void main(String[] args) {

        //测试数据,可以看到顺序是乱的。
        List<Student> user = new ArrayList<>();
        user.add( new Student(1, "张三","一年级"));
        user.add( new Student(4, "李四","三年级"));
        user.add( new Student(2, "王五","二年级"));
        user.add( new Student(3, "赵六","四年级"));

        //按编号升序(默认)
        List<Student> collect1 = user.stream().sorted(Comparator.comparingInt(Student::getId)).collect(Collectors.toList());
        //遍历输出
        System.out.println("编号升序");
        collect1.forEach(System.out::println);
        System.out.println("===========================================================================");

        //按年级升序(默认)
        List<Student> collect = user.stream()
                .sorted((o1, o2) -> Collator.getInstance(Locale.TRADITIONAL_CHINESE).compare(o1.getGrade(),o2.getGrade())).collect(Collectors.toList());
        //遍历输出
        System.out.println("中文升序");
        collect.forEach(System.out::println);
        System.out.println("===========================================================================");

        //按编号降序
        List<Student> collect2 = user.stream().sorted((o1, o2) -> o2.getId() - o1.getId()).collect(Collectors.toList());
        //遍历输出
        System.out.println("编号降序");
        collect2.forEach(System.out::println);
        System.out.println("===========================================================================");

        //按年级降序
        List<Student> collect3 =
                user.stream().sorted((o1, o2) -> Collator.getInstance(Locale.TRADITIONAL_CHINESE).compare(o2.getGrade(),o1.getGrade())).collect(Collectors.toList());
        //遍历输出
        System.out.println("中文降序");
        collect3.forEach(System.out::println);

    }
}

测试结果

可以看到成功:

图片上传失败!

stream确实好用一行代码搞定聚合、过滤、排序操作等。

原文:https://www.cnblogs.com/StarChen20/p/14600962.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!