java_Lambda表达式,Stream流

Lambda表达式

概述

        JDK8开始一个新语法,它是一个代替语法

        Lambda表达式简化对于接口的实现类对象实现,本质是一个匿名内部类的简易实现

编程思想

“面向对象”的编程思想:必须依靠对象,通过对象调用方法来完成功能

        例如:使用线程的步骤

                方式1:1,定义Runnable实现类2,创建实现类对象3,传入实现类对象

                方式2:匿名内部类

“面向过程”—>函数式编程思想:在写法上要比较简洁,注重代码的实现过程

        例如:使用线程的步骤:不需要定义实现类;不需要创建具体的子类对象;只需要传入一个“方法”即可

Lambda标准格式

前提

        必须具有接口,且要求接口中有且仅有一个抽象方法

        有且仅有一个抽象方法的接口,称为函数式接口

        @FunctionInterface注解:检查一个接口是否是函数式接口

格式

        (参数类型 参数名)—>{代码语句}

        ()内的语法与传统方法参数列表一致:无参数则留空,多个参数则用逗号分隔

        — >是新引入的语法格式,代表指向动作

        {}内的语法与传统方法体要求基本一致

Lambda省略格式

省略要求

        小括号内参数的类型可以省略

        如果小括号内有且仅有一个参数,则小括号和参数类型可以一起省略

        大括号内有且仅有一个语句,则可以同时省略((一对大括号+语句后的分号))

        如果大括号内仅有的一个语句是return语句,则return也可以省略(大括号+分号+return必须同时省略)

Lambda应用场景

应用场景

        创建对象,赋值给变量

        在调用方法时,作为“实参”

        作为方法的返回值

Stream流

Stream概述

介绍

        JDK8中为了支持Lambda,制作了一些应用,Stream就是一个典型的应用

        Java.util.stream<T>是java 8新加入的最常见的流接口

        Stream流:是一个接口,功能类似于迭代器,但更强大,可以对数据进行过滤,筛选,汇总等操作

思想

        Stream流,类似于车间的流水线,每次操作流,都可以将结果发送给下一个操作

        Stream流基于一定的函数模型思想设计,目的是为了拥有更好的性能和便利性

        Stream流包含了过滤,映射,跳过,计数等模型,调用指定方法,会使流模型转为另一个流模型

        Stream中将操作模型分为了延迟性与终结性两种,以便更好的执行流策略

特点

        Stream流是一次性的,不能重复使用,当执行流 的某个方法,这个流将会失效,并将结果存储到新流中

        Stream流不会存储数据

        Stream流不会修改数据源

        Stream流搭建的函数模型,只有终结方法存在,前面的延迟性方法才会执行

Stream对象

集合获取Stream流

        java.util.Collection接口中加入了default Stream<E> stream()方法来获取流,即所有的单列集合均可以获取流

        Java.util.Map接口未提供获取流的方法,需分别根据其键和值的集合后再获取流对象

数组获取Stream流

        数组对象没有方法,所以Stream接口中提供了静态方法static<T> Stream<T> of(T... t) 方法获取数组对应的流

Stream常用功能

终结方法

        返回值类型不再是Stream接口的方法,不支持链式调用

        统计个数 long count()返回流中的元素个数

        逐一处理 void forEach(Consumer <? super T >action) 对此流中的每个元素进行操作

非终结方法(函数拼接方法)

        返回值类型仍然是Stream接口方法,支持链式调用

        过滤 Stream<T> filter(Predicate <? super T> priedicate) 返回经过筛选,满足的条件的元素组成的流

        取前n个 Stream<T> limit(long maxSize) 返回由此流(包含)第maxSize个之前的元素组成的

        跳过前n个 Stream<T> skip(long n) 返回由此流(不含)第n个之后元素组成的流

        映射 <R>Stream<R> map(Function< ? super T, ? extends R> mapper) 返回流中旧元素经指定转换后的新元素组成的流

        组合 static<T> Stream<T> concat (Stream <? extends T> a,Stream <? extends T>) 返回将两个流中的元素合并到一起,组成新流

Stream收集数据

收集结果到集合

        具备终结性,不支持链式调用

        R collect (Collector<T ,A, R> coll):转换为指定的集合,R代表最终转换为的集合的具体类型

        java.util.stream.Collectors类提供一些方法,可以作为Collector接口的实例

收集结果到数组

        数组具备终结性,不支持链式调用

        Object[] toArray():转换为Object数主

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值