Java8利用stream流實現數字排序和中文排序(包括升降序)


代碼部分

利用stream的sorted()進行實現中文排序和數字排序(包括降序和升序),非常簡單。

package com.chstar.elasticsearchdemo.utils;

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確實好用一行代碼搞定聚合、過濾、排序操作等。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM