Java8——Stream流的使用(筛选操作)

Stream API提供了对流元素的筛选操作,既有普通的条件筛选filter,也有特殊的筛选,比如distinct去重、limit和skip截取!

  Stream API提供了对流元素的筛选操作,既有普通的条件筛选filter,也有特殊的筛选,比如distinct去重、limit和skip截取!
  筛选操作是一个中间操作!

Stream< T > filter(Predicate< ? super T > predicate)

  filter是使用最广泛的筛选操作,它接受一个断言,返回由与此给定断言匹配的此流的元素组成的流。

Stream< T > distinct()

  返回一个由该流的不同元素(根据元素的equals方法)组成的流。对于有序流,选择不同的元素是稳定的(对于重复的元素,首先在遇到顺序中出现的元素被保留。)对于无序流,不能保证稳定性。

Stream< T > limit(long maxSize)

  返回由该流的前maxSize元素组成的流,limit会最多截取流元素的前maxSize个。

Stream< T > skip(long n)

  在丢弃流的前n个元素后,返回由该流的前n元素之后的元素组成的流。 如果此流包含少于n元素,那么将返回一个空流。

  使用案例:

/**
 * @author lx
 */
public class FilterTest {


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

    @Before
    public void test() {
        students.add(new Student(10, 55, "小花"));
        students.add(new Student(13, 100, "小华"));
        students.add(new Student(9, 85, "晓华"));
        students.add(new Student(8, 70, "肖华"));
        students.add(new Student(8, 70, "肖华"));
    }

    @Test
    public void filter() {
        System.out.println("filter筛选成绩大于等于70的学生");
        //filter筛选成绩大于等于70的学生
        students.stream().filter(student -> student.getScore() >= 70).forEach(System.out::println);

        System.out.println("filter+distinct筛选成绩大于等于70的学生,且去除重复数据");
        //filter+distinct筛选成绩大于等于70的学生,且去除重复数据
        students.stream().filter(student -> student.getScore() >= 70).distinct().forEach(System.out::println);

        System.out.println("limit最多截取前2个数据");
        //limit最多截取前2个数据
        students.stream().filter(student -> student.getScore() >= 70).limit(2).forEach(System.out::println);

        System.out.println("skip丢弃前2个数据");
        //skip丢弃前2个数据
        students.stream().filter(student -> student.getScore() >= 70).skip(2).forEach(System.out::println);

        System.out.println("skip丢弃前1个数据,limit最多截取前1个数据");
        students.stream().filter(student -> student.getScore() >= 70).skip(1).limit(1).forEach(System.out::println);
    }

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

        public int getAge() {
            return age;
        }

        public void setAge(int age) {
            this.age = age;
        }

        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 age, int score, String name) {
            this.age = age;
            this.score = score;
            this.name = name;
        }

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

        @Override
        public String toString() {
            return "Student{" +
                    "age=" + age +
                    ", 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 (getAge() != student.getAge()) return false;
            if (getScore() != student.getScore()) return false;
            return getName() != null ? getName().equals(student.getName()) : student.getName() == null;
        }

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

}

  • 发表于 2020-09-16 15:48
  • 阅读 ( 24 )

0 条评论

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

1209 篇文章

作家榜 »

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