Streams 过滤器

Streams 过滤器

演示使用流的filter(),collect(),findAny()和orElse()

使用list过滤

    public List<Student> getStudents(){
        List<Student> result = new ArrayList<>();
        result.add(new Student(1,"小易","21"));
        result.add(new Student(2,"小二","23"));
        result.add(new Student(4,"小思","24"));
        result.add(new Student(3,"小三","24"));
        return result;
    }

    @Test
    public void StreamsFilterTest() {
        List<Student> studentList = getFilterOutput(getStudents(), "小三");
        System.out.println("把小三给我过滤掉====>"+studentList);
    }

    public List<Student> getFilterOutput(List<Student> liens ,String filter){
        List<Student> result = new ArrayList<>();
        for (Student student : liens) {
            //过滤你想过滤掉的学生
            if (!filter.equals(student.getName())){
                result.add(student);
            }
        }
        return result;
    }

Streams 过滤器

使用stream.filter()

stream.filter()来过滤List,并collect()以流转换为List

    @Test
    public void StreamsFilterTest() {
        List<Student> studentList = getStudents().stream()
                .filter(student -> !"小三".equals(student.getName()))
                .collect(Collectors.toList());
        studentList.forEach(student-> System.out.println("把小三给我剔除了---->"+student));
    }

Streams 过滤器

Streams filter(), findAny() and orElse()

1.8之前

    public List<Student> getStudents(){
        List<Student> result = new ArrayList<>();
        result.add(new Student(1,"小易","21"));
        result.add(new Student(2,"小二","23"));
        result.add(new Student(4,"小思","24"));
        result.add(new Student(3,"小三","24"));
        return result;
    }

    @Test
    public void StreamsFilterTest() {
        Student studentByName = getStudentByName(getStudents(), "小三");
        System.out.println(studentByName);
    }

    public Student getStudentByName(List<Student> students,String name){
        Student student = null;
        for (Student studentTemp : students) {
            if (name.equals(studentTemp.getName())){
                student = studentTemp;
            }
        }
        return student;
    }

Streams 过滤器

1.8之后可以用

    public List<Student> getStudents(){
        List<Student> result = new ArrayList<>();
        result.add(new Student(1,"小易","21"));
        result.add(new Student(2,"小二","23"));
        result.add(new Student(4,"小思","24"));
        result.add(new Student(3,"小三","24"));
        return result;
    }

    @Test
    public void StreamsFilterTest() {
        Student streamsFilterStudent = StreamsFilterStudent("小三");
        System.out.println(streamsFilterStudent);
    }

    public Student StreamsFilterStudent(String name){
        return getStudents().stream()
                .filter(student -> name.equals(student.getName()))
                .findAny()
                .orElse(null);//如果没有返回null
    }

Streams 过滤器

多条件判断

   public List<Student> getStudents(){
        List<Student> result = new ArrayList<>();
        result.add(new Student(1,"小易","21"));
        result.add(new Student(2,"小二","23"));
        result.add(new Student(4,"小二","24"));
        result.add(new Student(3,"小二","24"));
        return result;
    }

    @Test
    public void StreamsFilterTest() {
        Student streamsFilterStudent = StreamsFilterStudent();
        System.out.println(streamsFilterStudent);
        System.out.println("==============================");
        System.out.println(StreamsFilterStudents());
    }

    public Student StreamsFilterStudent(){
        return getStudents().stream()
                .filter(student -> {
                    if (student != null && "24".equals(student.getAge())) {
                        return true;
                    }return false;
                })
                .findAny()
                .orElse(null);//如果没有返回null
    }

    public Student StreamsFilterStudents(){
        return getStudents().stream()
                .filter(student -> {
                    if (student != null && "21".equals(student.getAge())) {
                        return true;
                    }
                    return false;
                })
                .findAny()
                .orElse(null);//如果没有返回null
    }

Streams 过滤器

stream和map

如果使用map它返回的类型是Stirng

    public List<Student> getStudents(){
        List<Student> result = new ArrayList<>();
        result.add(new Student(1,"小易","21"));
        result.add(new Student(2,"小二","23"));
        result.add(new Student(4,"小二","24"));
        result.add(new Student(3,"小二","24"));
        return result;
    }

    @Test
    public void StreamsFilterTest() {
        String studentName = StreamsFilterStudent("小二");
        System.out.println("名字====>"+studentName);

    }

    public String StreamsFilterStudent(String name){

        String studentName = getStudents().stream()
                .filter(student -> name.equals(student.getName()))
                .map(Student::getName)
                .findAny()
                .orElse(null);//如果没有返回null
        System.out.println(studentName);
        return studentName;
    }

Streams 过滤器

stream和list

    public List<Student> getStudents(){
        List<Student> result = new ArrayList<>();
        result.add(new Student(1,"小易","21"));
        result.add(new Student(2,"小二","23"));
        result.add(new Student(4,"小二","24"));
        result.add(new Student(3,"小二","24"));
        return result;
    }

    @Test
    public void StreamsFilterTest() {
        List studentName = StreamsFilterStudent("小二");
        System.out.println("名字====>"+studentName);

    }

    public List StreamsFilterStudent(String name){
        List<String> studentList = getStudents().stream()
                .map(Student::getName)
                .limit(1)//可以指定返回多少条
                .collect(Collectors.toList());

//        studentList.forEach(s -> System.out.println(s));
        studentList.forEach(System.out::println);
        return studentList;
    }

Streams 过滤器

具体可参照oracle
https://www.oracle.com/technical-resources/articles/java/ma14-java-se-8-streams.html

并行流

打印数字 可以看到到时按照顺序排序打印下来的

    public static void main(String[] args) {
        System.out.println("normal");
        IntStream range = IntStream.rangeClosed(1, 100);
        range.forEach(System.out::println);

        System.out.println("parallel");
        IntStream intStream = IntStream.rangeClosed(1, 99);
        intStream.forEach(System.out::println);
    }

打印26个字母

    @Test
    public void getDataTest(){
        List<String> data = getData();
        data.stream().forEach(System.out::println);
    }

    public List<String> getData(){
        List<String> data = new ArrayList<>();
        int n = 97; //97=a 122=z
        while (n<=122){
            char c = (char) n;
            data.add(String.valueOf(c));
            n++;
        }
        return data;
    }

Stream 是否以并行模式运行

可以是用paraller

    public static void main(String[] args) {
        System.out.println("normal");
        IntStream range = IntStream.rangeClosed(1, 100);
        range.forEach(System.out::println);

        System.out.println("parallel");
        IntStream intStream = IntStream.rangeClosed(1, 99);
        IntStream parallel = intStream.parallel();
        System.out.println(parallel.isParallel());//true为开启
        parallel.forEach(System.out::println);
    }

可加入线程名


    public static void main(String[] args) {
        System.out.println("normal");
        IntStream range = IntStream.rangeClosed(1, 100);
        range.forEach(p->{
            System.out.println("Thread : "+ Thread.currentThread().getName() + " "+ p);
        });

        System.out.println("parallel");
        IntStream intStream = IntStream.rangeClosed(1, 99);
        IntStream parallel = intStream.parallel();
        System.out.println(parallel.isParallel());//true为开启
        parallel.forEach(p->{
            System.out.println("Thread : "+Thread.currentThread().getName() + " "+ p);
        });
    }

    @Test
    public void getDataTest(){
        List<String> data = getData();
        data.stream().forEach(System.out::println);
    }

    public List<String> getData(){
        List<String> data = new ArrayList<>();
        int n = 97; //97=a 122=z
        while (n<=122){
            char c = (char) n;
            data.add(String.valueOf(c));
            n++;
        }
        return data;
    }

待更新

上一篇:Mybatis源码分析


下一篇:hdfs对文件的增删改查