面向对象思想需要关注用什么对象完成什么事故。而函数式编程思想就类似于我们数学中的函数。它主要关注的是对数据进行了什么操作。优点:
可推导可省略# 基本格式
可以对流中的元素进行条件过滤,符合过滤条件的才能继续留在流中。比方:打印所有姓名长度大于1的作家的姓名
可以把对流中的元素进行计算或范例转换。比方:打印所有作家的姓名
可以去除流中的重复元素。比方:打印所有作家的姓名,并且要求其中不能有重复元素。
注意:distinct方法是依赖Object的equals方法来判断是否是相同对象的。以是需要注意重写equals方法。
可以对流中的元素进行排序。比方:对流中的元素按照年龄进行降序排序,并且要求不能有重复的元素。
注意:假如调用空参的sorted()方法,需要流中的元素实现了Comparable接口。
可以设置流的最大长度,超出的部门将被抛弃。比方:对流中的元素按照年龄进行降序排序,并且要求不能有重复的元素,然后打印其中年龄最大的两个作家的姓名。
跳过流中的前n个元素,返回剩下的元素比方:打印除了年龄最大的作家外的其他作家,要求不能有重复元素,并且按照年龄降序排序。
map只能把一个对象转换成另一个对象来作为流中的元素。而flatMap可以把一个对象转换成多个对象作为流中的元素。例一:打印所有书籍的名字。要求对重复的元素进行去重。
对流中的元素进行遍历操作,我们通过传入的参数去指定对遍历到的元素进行什么详细操作。例子:输出所有作家的名字
可以用来获取当前流中元素的个数。例子:打印这些作家的所出书籍的数目,注意删除重复元素。
可以用来或者流中的最值。例子:分别获取这些作家的所出书籍的最高分和最低分并打印。
把当前流转换成一个聚集。例子:获取一个存放所有作者名字的List聚集。
可以用来判断是否有任意符合匹配条件的元素,结果为boolean范例。例子:判断是否有年龄在29以上的作家
可以用来判断是否都符合匹配条件,结果为boolean范例。假如都符合结果为true,否则结果为false。例子:判断是否所有的作家都是成年人
可以判断流中的元素是否都不符合匹配条件。假如都不符合结果为true,否则结果为false例子:判断作家是否都没有凌驾100岁的。
获取流中的任意一个元素。该方法没有办法保证获取的一定是流中的第一个元素。例子:获取任意一个年龄大于18的作家,假如存在就输出他的名字
获取流中的第一个元素。例子:获取一个年龄最小的作家,并输出他的姓名。
对流中的数据按照你指定的计算方式计算出一个结果。(缩减操作)reduce的作用是把stream中的元素给组合起来,我们可以传入一个初始值,它会按照我们的计算方式依次拿流中的元素和初始化值进行计算,计算结果再和后面的元素计算。
我们在编写代码的时候出现最多的就是空指针异常。以是在很多情况下我们需要做各种非空的判断。比方:
Optional就好像是包装类,可以把我们的详细数据封装Optional对象内部。然后我们去使用Optional中封装好的方法操作封装进去的数据就可以非常优雅的避免空指针异常。我们一般使用Optional的静态方法ofNullable来把数据封装成一个Optional对象。无论传入的参数是否为null都不会出现问题。
只有一个抽象方法的接口我们称之为函数接口。JDK的函数式接口都加上了@FunctionalInterface注解进行标识。但是无论是否加上该注解只要接口中只有一个抽象方法,都是函数式接口。# 常见函数式接口
我们在使用lambda时,假如方法体中只有一个方法的调用的话(包罗构造方法),我们可以用方法引用进一步简化代码# 推荐用法
明白:转化成匿名内部类有助于明白
我们在使用lambda时不需要考虑什么时候用方法引用,用哪种方法引用,方法引用的格式是什么。我们只需要在写完lambda方法发现方法体只有一行代码,并且是方法的调用时使用快捷键alt+enter尝试是否能够转换成方法引用即可。当我们方法引用使用的多了慢慢的也可以直接写出方法引用。
其实就是引用类的静态方法# 格式
假如我们在重写方法的时候,方法体中只有一行代码,并且这行代码是调用了某个类的静态方法,并且我们把要重写的抽象方法中所有的参数都按照顺序传入了这个静态方法中,这个时候我们就可以引用类的静态方法。比方:如下代码就可以用方法引用进行简化
假如我们在重写方法的时候,方法体中只有一行代码,并且这行代码是调用了某个对象的成员方法,并且我们把要重写的抽象方法中所有的参数都按照顺序传入了这个成员方法中,这个时候我们就可以引用对象的实例方法比方:
假如我们在重写方法的时候,方法体中只有一行代码,并且这行代码是调用了第一个参数的成员方法,并且我们把要重写的抽象方法中剩余的所有的参数都按照顺序传入了这个成员方法中,这个时候我们就可以引用类的实例方法。比方:
假如方法体中的一行代码是构造器的话就可以使用构造器引用。# 格式
假如我们在重写方法的时候,方法体中只有一行代码,并且这行代码是调用了某个类的构造方法,并且我们把要重写的抽象方法中的所有的参数都按照顺序传入了这个构造方法中,这个时候我们就可以引用构造器。比方:
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) | Powered by Discuz! X3.4 |