Java8——Stream流的使用(匹配操作)

在集合、数组操作中,我们常常需要判断集合是否包含或者不包含具有某些规则的元素。Stream API同样提供了allMatch、anyMatch、noneMatch方法来完成规则匹配操作。

  在集合、数组操作中,我们常常需要判断集合是否包含或者不包含具有某些规则的元素。Stream API同样提供了allMatch、anyMatch、noneMatch方法来完成规则匹配操作。
  匹配操作是一个终端操作!

boolean allMatch(Predicate< ? super T > predicate)

  如果流的所有元素都匹配提供的断言,那么返回true,如果流是空的或者有任何不匹配的元素就返回false。

boolean noneMatch(Predicate< ? super T > predicate)

  如果流的所有元素都不匹配提供的断言或者流是空的,那么返回true,如果有任何至少一个匹配的元素就返回false。

boolean anyMatch(Predicate< ? super T > predicate)

  如果流存在至少一个元素匹配提供的断言,那么返回true,如果或者流是空的或者任何元素都不匹配就返回false。

  注意:流是否为空是最先判断的条件。空集合、空数组、空文件等等来源都将构建一个空流。

  使用案例:

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

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

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


    /**
     * 空流测试
     */
    @Test
    public void testNull() {
        System.out.println(Stream.of().anyMatch(i -> true));
        System.out.println(Stream.of().anyMatch(i -> false));
        System.out.println(Stream.of().noneMatch(i -> true));
        System.out.println(Stream.of().noneMatch(i -> false));
        System.out.println(Stream.of().anyMatch(i -> true));
        System.out.println(Stream.of().anyMatch(i -> false));
    }

    /**
     * match测试
     */
    @Test
    public void testMatch() {
        //集合中是否有姓名为 小华 的学生
        System.out.println(students.stream().anyMatch(student -> "小华".equals(student.getName())));
        //集合中是否有姓名为 小华1 的学生
        System.out.println(students.stream().anyMatch(student -> "小华1".equals(student.getName())));

        //集合中是否所有的学生分数都大于55
        System.out.println(students.stream().allMatch(student -> student.getScore() > 55));
        //集合中是否所有的学生分数都大于等于55
        System.out.println(students.stream().allMatch(student -> student.getScore() >= 55));

        //集合中是否所有的学生分数都不小于55
        System.out.println(students.stream().noneMatch(student -> student.getScore() < 55));
        //集合中是否所有的学生分数都不小于等于55
        System.out.println(students.stream().noneMatch(student -> student.getScore() <= 55));
    }


    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{" +
                    "age=" + 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:55
  • 阅读 ( 25 )

0 条评论

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

1209 篇文章

作家榜 »

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