
2021-04-09阅读小笔记:JDK8中的一等公民和Stream小概念
发布日期:2021-05-08 23:40:48
浏览次数:21
分类:博客文章
本文共 1723 字,大约阅读时间需要 5 分钟。
1 一等公民和二等公民
在 jdk8之前,只有值(基本类型和实例引用)是一等公民,可以作为方法参数传递,而类和方法等是作为二等公民,不能作为方法的传参。 jdk8中,方法也可以作为一等公民传递,即方法(函数)可以作为方法参数传递,这称为函数式编程,而我们一般利用匿名函数(lambda表达式)作为方法传参的使用方式。
传递方法的最大的优势是,方法可以抽象封装到行为级别。
在 jdk8 之前,例如我让机器人做一件事,那么就只能调用指定的一个方法:例如购物就是shopping(String something),取包裹就是fetchPackage(String orderNum);但是在 jdk8 之后,我可以将行为传递到方法中,doSomeThing(行为),机器人直接根据行为去一步一步执行就好。
代码例子:
/** * 机器人Demo * @author winfun * @date 2021/4/8 10:33 上午 **/public class RobotDemo { public static void shopping(String someThing){ System.out.println("调用shopping方法,让机器人购物,购买: "+someThing); } public static void fetchPackage(String orderNum){ System.out.println("调用fetchPackage方法,让机器人取快递,快递单号: "+orderNum); } public static void doSomeThing(String param,Consumerconsumer){ System.out.print("调用doSomeThing方法,");consumer.accept(param); } public static void main(String[] args) { System.out.println("jdk8 之前,机器人干活。。。。"); shopping("苹果"); shopping("香蕉"); fetchPackage("order123"); fetchPackage("order234"); System.out.println("jdk8 后,机器人干活"); doSomeThing("苹果",v->System.out.println("让机器人购物,购买:"+v)); doSomeThing("香蕉",v->System.out.println("让机器人购物,购买:"+v)); doSomeThing("order123",v->System.out.println("让机器人取快递,快递单号: "+v)); doSomeThing("order234",v->System.out.println("让机器人取快递,快递单号: "+v)); }}
2 Stream 和 Collection 的关系
Collection 是存储数据的地方,我们可以遍历集合来对集合中的数据做进一步的操作。
Stream 是对 Collection的操作,允许我们以声明性方式处理数据集合,Stream 在提供的方法内部都做了实现;你可以把它们看成遍历数据集的高级迭代器(内部迭代,而上面的遍历集合是外部迭代)。
此外,流还可以透明地并行处理,你无需写任何多线程代码了!
Stream 提供的操作类型
Stream 接口定义了许多操作,分为两类:中间操作和终端操作,
中间操作会返回另外一个流,除非流水线上触发一个终端操作,否则中间操作不会执行任何处理——它们很懒。
终端操作会从流的流水线生成结果。其结果是任何不是流的值,比如List、Integer,甚至void。发表评论
最新留言
很好
[***.229.124.182]2025年05月09日 19时39分24秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
数据帧CRC32校验算法实现
2019-03-16
【转载】DSP基础--定点小数运算
2019-03-16
idea thymeleaf页面变量报错解决
2019-03-16
云游戏,打响5G第一战
2019-03-16
Docker 拉取镜像速度太慢
2019-03-16
关于window匿名通道的使用以及所遇到的问题
2019-03-16
逆向工程初步160个crackme-------3
2019-03-16
WM_PAINT 与 WM_ERASEBKGND消息的深入分析
2019-03-16
初探MFC
2019-03-16
代码段段间跳转流程
2019-03-16
HUAWEI防火墙通过IKE方式协商IPSec隧道(采用预共享密钥认证)
2019-03-16
C语言自学笔记
2019-03-16
Android基础知识——数据存储方案
2019-03-16
Android基础知识——使用网络技术
2019-03-16
纵观四十岁的程序员们,他们究竟生活的怎么样?
2019-03-16
Nginx配置文件编写(基础配置)
2019-03-16
对抗机器学习简介
2019-03-16
python里面读取文件和保存文件的路径
2019-03-16
对汇编中一些基础知识的理解
2019-03-16
计网复习3
2019-03-16