stream(面向函数编程)

什么是Stream:

Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。

Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。

Stream API可以极大提高Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。

这种风格将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选, 排序,聚合等。

元素流在管道中经过中间操作(intermediate operation)的处理,最后由最终操作(terminal operation)得到前面处理的结果。


stream(面向函数编程)_第1张图片
Stream的方法-未截图全部

常用方法——示例:

import com.seebon.spfcore.entities.po.mysql.sys.User;
import org.junit.Test;

import java.util.ArrayList;
import java.util.List;

public class T {
    class Dog{
        Integer id;
        String name;

        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 Dog() {
        }

        public Dog(Integer id, String name) {
            this.id = id;
            this.name = name;
        }
    }

    @Test
    public void name() throws Exception {
        List dogs=new ArrayList<>();
        Dog  dog1=new Dog(1,"灰灰");
        Dog  dog2=new Dog(2,"胖胖");
        Dog  dog3=new Dog(3,"糖糖");
        dogs.add(dog1);
        dogs.add(dog2);
        dogs.add(dog3);
    }
}

  • foreach

foreach是一个最终操作(没有对stream做最终操作,对它的其他操作是不会生效的),没有返回值

//输出所有 狗的名字
        dogs.stream().forEach(temp-> System.out.println(temp.getName()));
//花括号可以做更多操作      
        dogs.stream().forEach(temp->{
            System.out.println(temp.getName());
        });
//输出结果:
foreach-1灰灰
foreach-1胖胖
foreach-1糖糖
foreach-2灰灰
foreach-2胖胖
foreach-2糖糖
  • filter

//过滤掉名字叫灰灰的狗
        List dogs2 = dogs.stream().filter(dog -> !dog.getName().equals("灰灰")).collect(Collectors.toList());
//collect() 也是一个最终操作,所以前面的过滤操作会生效
        dogs2.stream().forEach(dog -> System.out.println(dog.getName()));
//输出结果:
胖胖
糖糖

allMatch() 匹配查询集合中是否都符合条件,返回true/false
anyMatch() 匹配查询集合中是否存在符合条件的,返回true/false
count() 统计集合中数量
distinct() 去重复
………………
这样操作起来很直观,剩下的方法看到方法名基本就能知道他们的作用了,所以就不一一写到笔记了。

总结:

用stream操作集合,可以使代码看起来非常简洁,做自己想做的操作就OK,不用自己写迭代方面(内迭代)。
但是stream并不是没有性能开销,有时自己写迭代 运行会更快。
所以建议 如果对集合有两步以上的操作可以用stream。

你可能感兴趣的:(stream(面向函数编程))