Stream流和函数式编程

Stream流

                 拼接流式模型

生产饮料 放瓶子   洗瓶子  装饮料  封口  装箱

java中的Stream并不会存储任何数据,而是按需计算

数据源: 流的来源,可以是集合,数组等.
Pipelining:中间的每一步操作都会返回流对象本身,这样的操作可以串联为一个管道,可以对操作进行优化,比如延迟执行和短路.
内部迭代:以前的方法都是先有集合,在进行迭代(外部迭代),流可以调用foreach()方法直接遍历.(内部迭代)

当使用流的时候,通常包括三个步骤:
获取一个数据源(source) -> 数据转换 -> 执行操作获取想要的结果,每次转换原有Stream不变,返回一个新的Stream对象.


获取流:
1.所有的Conllection集合都可以.stream来获取流(list.stream() )

2.Stream接口的静态方法of可以获取数组对应的流(Stream.of(1,2,3,4) )

常用方法(除了终结方法,其他都是延迟方法)

  • 延迟方法:返回值类型仍为Stream流,支持链式调用.
  • 终结方法:返回值类型不在是Stream流,不支持链式调用(包括count,forEach)

例:

//创建一个list集合,存储姓名
List<String> list = new ArrayList<>();
list.add("张无忌");
list.add("周芷若");
list.add("赵敏");
list.add("张强");
list.add("张三丰");

/**
* Stream流写法 关注的是干什么,而不是怎么干
*/
//对list集合元素进行过滤, 只要张, 只要姓名长度为3的人
list.stream().filter((String name)->{
   
	return name.startsWith("张");
}).filter((String name)->{
   
	return name.length()==3;
});
//简化写法
list.stream()
        .filter(name -> name.startsWith("张"))
        .filter(name -> name.length() == 3)
        .forEach(name-> System.out.println(name));

System.out.println("------------------");
/**
* 传统写法
*/
//对list集合元素进行过滤, 只要张
ArrayList<String> a = new ArrayList<>();
for(String s : list) {
   
    if(s.startsWith("张")) {
   
        a.add(s);
    }
}
//对a集合进行过滤,只要姓名长度为3的人
ArrayList<String> b = new ArrayList<>();
for(String s : a) {
   
    if(s.length() == 3) {
   
        b.add(s)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值