2021-04-09阅读小笔记:JDK8中的一等公民和Stream小概念

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,Consumer<String> consumer){
        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。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值