Lambda表达式

Lambda表达式和stream(流)

Lambda表达式

1.出现的背景

java是面向对象语言,除了部分简单数据类型(基本数据类型),java中的一切都是对象。在java中定义的函数或方法不可能完全独立,也不能将方法作为参数或返回一个方法给实例。java8之前,若我们想要把这些功能传递给某个方法,需要写内部类。

在java8之前,想要在java中将普通的方法或函数像参数一样传值并不简单,为此,java8增加了Lambda表达式。

2.Lambda表达式

Lambda表达式是一个匿名函数,可以把Lambda表达式理解为一段可以传递的代码。

Lambda表达式的本质是“语法糖”,由编译器推断并帮你转换包装为常规的代码。

关于语法糖:指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。通常来说使用语法糖能够增加程序的可读性,从而减少程序代码出错的机会。

java中Lambda表达式通常使用(arguement)->{body}语法书写。

3.什么是Functional interface(功能性接口)

Lambda表达式只支持函数式接口,也就是只有有一个抽象方法的接口。功能接口是java8中的新增功能,它们只允许一个抽象方法。这些接口也被称为单抽象方法接口

引入了一个注释@FunctionalInterface,当你注释的接口违反了FunctionalInterface的规则时,出现编译期错误。

Stream(流)

steam是java8的新特性,它允许你一声明式的方式处理数据集合,可以把它看做是遍历数据集的高级迭代器。

注意!:要分清java8中stream和InoutStrean与OutStream是是不同的概念。

这里使用的就是java8中的stream流,使用声明性方法写的:说明想要完成什么,而不是说明如何去实现一个操作。

就是从支持数据处理操作的源,生成的元素序列。

元素列表:和集合一样,流也提供了一个接口,访问特定元素类型的一组有序值。

数据源:获取数据的源,比如集合

数据处理操作:流更偏向用于数据处理和计算,比如filter,map,sort等。

简单地说,我们通过一个集合的stream方法获取一个流,然后对流进行一系列流操作,最后再构建我们需要的数据集合。

在java中,数列和集合通常是用于存放数据的,而流是用来操作集合中的数据的。

流操作

流操作分为两种:中间操作和终端操作。

数据源 -> 中间操作 -> 终端操作 -> 结果

诸如fielter或者sort等中间操作会返回另一个流,进而进行下一步流操作,而终端操作则是将流关闭,创建新的数据集合对象(也可不构建)

流操作详细

获取流

stream()

中间操作

filter :过滤流中的某些元素

sorted() :自然排序,流中元素需实现Comparable接口

distinct :去除重复元素

limit(n) :获取n个元素

skip(n) :跳过n个元素,配合limit(n)可实现分页

map() :将其映射一个新的元素

终端操作

forEach :遍历流中的元素

toArray :将流中的元素倒入一个数组

Min :返回流中元素最小值

Max :返回流中元素最大值

count :返回流中元素的总个数

Reduce :所有元素求和

anyMatch :接受一个predicate函数,只要流中有一个元素满足条件则返回true,反之false。

allMatch :接收一个predicate函数,当流中每个元素都符合条件时才返回true,反之false。

findFirst :返回流中第一个元素。

collect :将流中的元素倒入一个集合,Collection或Map

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值