Java8——Stream流的使用(排序操作)

集合支持排序,Stream API也提供了对流元素进行排序操作的方法!

  集合支持排序,Stream API也提供了对流元素进行排序操作的方法!
  排序操作是一个中间操作!

Stream< T > sorted()

  返回由此流的元素组成的流,根据自然顺序排序如果流元素不是Comparable类型 ,则执行终端操作时抛出ClassCastException。

Stream< T > sorted(Comparator< ? super T > comparator)

  返回由该流的元素组成的流,根据提供的Comparator进行排序。对于有序流,排序稳定。 对于无序的流,不能保证稳定性。

使用案例:

/**
 * @author lx
 */
public class SortedTest {
    /**
     * 自然排序
     */
    @Test
    public void sorted() {
        Stream.of(2, 0, 3, 7, 5).sorted().forEach(System.out::println);
    }


    /**
     * 指定比较规则
     */
    @Test
    public void sortedCom() {
        students.stream()
                //首先根据score比较排序,相等时再根据id比较排序
                .sorted(Comparator.comparingInt(Student::getScore).thenComparing(Student::getId))
                .forEach(System.out::println);
    }


    List<Student> students = new ArrayList<>();

    @Before
    public void before() {
        students.add(new Student(2, 100, "小花"));
        students.add(new Student(1, 100, "小华"));
        students.add(new Student(3, 85, "晓华"));
        students.add(new Student(4, 70, "肖华"));
    }


    static class Student {
        private int id;
        private int score;
        private String name;

        public int getId() {
            return id;
        }

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

        public int getScore() {
            return score;
        }

        public void setScore(int score) {
            this.score = score;
        }

        public String getName() {
            return name;
        }

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

        public Student(int id, int score, String name) {
            this.id = id;
            this.score = score;
            this.name = name;
        }

        public Student(int id) {
            this.id = id;
        }

        @Override
        public String toString() {
            return "Student{" +
                    "id=" + id +
                    ", score=" + score +
                    ", name='" + name + '\'' +
                    '}';
        }

        @Override
        public boolean equals(Object o) {
            if (this == o) return true;
            if (!(o instanceof Student)) return false;

            Student student = (Student) o;

            if (getId() != student.getId()) return false;
            if (getScore() != student.getScore()) return false;
            return getName() != null ? getName().equals(student.getName()) : student.getName() == null;
        }

        @Override
        public int hashCode() {
            int result = getId();
            result = 31 * result + getScore();
            result = 31 * result + (getName() != null ? getName().hashCode() : 0);
            return result;
        }
    }
}

  • 发表于 2020-09-16 15:49
  • 阅读 ( 34 )

0 条评论

请先 登录 后评论
NX小编
NX小编

1209 篇文章

作家榜 »

  1. NX小编 1209 文章
  2. 58沈剑 309 文章
  3. 奈学教育 137 文章
  4. 李希沅 | 奈学教育 36 文章
  5. 江帅帅 | 奈学教育 29 文章
  6. 林淮川 | 奈学教育 12 文章
  7. 科技热点 10 文章
  8. 邱鹏超 2 文章