龙空技术网

Java函数式编程(2):流式计算

码农镖局 176

前言:

此时同学们对“java流式编程与网络程序设计心得体会”大概比较重视,咱们都需要学习一些“java流式编程与网络程序设计心得体会”的相关资讯。那么小编同时在网摘上搜集了一些关于“java流式编程与网络程序设计心得体会””的相关资讯,希望同学们能喜欢,姐妹们一起来了解一下吧!

您好,我是湘王,这是我的头条号「湘王说」,欢迎您来,欢迎您再来~

Lambda表达式虽然将接口作为代码块赋值给了变量,但如果仅仅只是Lambda表达式,还无法让Java由量变引起质变。真正让Lambda能够发挥出巨大威力的,就是流式计算。

所谓流式计算,就是让数据像在流水线上一样,从一道工序流转到下一道工序。就像这样:

如果把数据处理的方式比作流水线,那么Spark、Storm和Flink就是目前市面上头部的三家工厂。它们有各种各样的数据装配间(也就是各种处理数据的算子),将数据按照所需加工成型。所以,不懂流式计算根本就做不了大数据开发。上面那张图,如果换成流式计算的,就是这样:

Lambda表达式就变成了一个个的数据装配间。

还是以实际的代码例子来说明。假如有这样的代码:

如果想筛选28岁以下的员工,并按年龄排序,用老办法只能这么做:

如果要转换成Lmabda表达式的话,就是这样:

可以看到,这虽然用了Lambda表达式替代了旧的方法,但可能要写大量的函数式接口,Lambda沦为鸡肋,完全谈不上简便快速,更别说优雅!

所以,这时候如果用流式计算,那简直不要太优雅:

仅仅几行代码就搞定了,完全没有之前那种「傻大黑粗」的感觉了。

上面的代码,可以用这幅图来还原:

1、先用filter算子(流式计算中的函数,或者方法,在大数据中统称为算子,我也习惯这么称呼)将符合年龄条件的雇员筛选出来;

2、再按照年龄从低到高排序;

3、将排好序的员工列表输出出来。

就是这么简单粗暴!

就像藏宝图一样,只有将Lambda表达式和流式计算这两张碎片拼起来,才是完整的Java函数式编程。

所有的流式计算算子可以分为两大类:中间操作和终端操作。

1、中间操作:返回另一个流,如filter、map、flatMap等;

2、终端操作:从流水线中生成结果,如collect、count、reduce、forEach等。

现在,咱们已经找到了函数式编程这个宝藏。那么再回到最初的问题:当要实现某宝、某东和某哈哈的员工联谊并解决单身问题时,有更好的办法吗?

当然有,而且只用一行代码就可以搞定:

List<Employee> unMarriedList4 = list.stream().filter(company -> Company.Type.BIG == company.getType()).flatMap(companys -> companys.getEmployees().stream()).filter(Employee::isMarried).sorted(Comparator.comparing(Employee::getAge)).collect(Collectors.toList());

感谢您的大驾光临!咨询技术、产品、运营和管理相关问题,请关注后留言。欢迎骚扰,不胜荣幸~

我在头条

标签: #java流式编程与网络程序设计心得体会