Java8笔记

策略设计模式

  • 行为参数化:

处理频繁变更的需求的一种软件开发模式,一个方法接受多个不同的行为作为参数,并在内部使用它们,完成不同行为的能力

具体说明:

核心:将迭代要筛选的集合的逻辑与对集合中每个元素应用的行为区分开来

定义一个接口,利用不同对象对接口进行覆写,迭代处(顶层)接收接口对象,定义的接口称为谓词

  • 匿名类:

解决上述使用时,需创建多个类实现接口的重复性

具体说明:

在顶层接收对象时直接覆写接口的方法

  • Lambda表达式:

解决上述使用时,需实例化多个对象

具体说明:与匿名类的实现类似,只是形式不一样,也是在顶层时覆写接口的方法



Lambda表达式:

可以赋给一个变量,或传递给一个接受函数式接口作为参数的方法

允许你直接以内联的形式为函数式接口的抽象方法提供实现,并把整个表达式作为函数式接口的实例(具体说来,是函数式接口一个具体实现的实例)

函数式接口:

只定义一个抽象方法的接口

函数描述符:

描述Lambda和函数式接口的抽象方法的签名


环绕执行模式

使用Lambda表达式


构建器模式:一个调用链用来设置一套配置,接着是调用built方法


集合与流:并行操作使集合相对于流来说具有劣势

区别:

1. 遍历次数:流只能遍历一次,集合可遍历多次

2. 迭代形式:流是内部迭代Stream,集合是外部迭代(迭迭器与for-each循环)Collection

流的定义:从支持数据处理操作的源生成的元素序列

流的作用:

1. 以声明性方式处理数据集合(通过类似数据库的查询语句实现,而不是循环迭代)

2. 自动进行并行处理,无需写线程

流的操作:

1. 中间操作:可以连接起来的操作

2. 终端操作:关闭流的操作,其结果是任何不是流的值,比如列表,整型,void

流的具体操作:

筛选:filter,接受一个谓词(一个返回boolean的函数)作为参数,并返回一个包括所有符合谓词的元素的流

各异:distinct,会返回一个元素各异(根据流所生成元素的hashCode和equals方法实现)的流

截短:limit,会返回一个不超过给定长度的流,所需的长度作为参数传递,如果流有序,则返回前n个元素,如果流无序,则结果无序

跳过:skip,返回一个扔掉了前n个元素的流,跳过n个作为参数传递

映射:map,接受一个函数作为参数,这个函数会被应用到每个元素上,并将其映射成一个新的元素

扁平化:flatmap,把一个流中的每个值都换成另一个流,然后把所有的流连接超来成为一个流

检查谓词是否至少匹配一个元素:anyMatch

检查谓词是否匹配所有元素:allMatch

检查谓词是否不匹配所有元素:noneMatch

查找元素:findAny,返回当前流中的任意元素

查找第一个元素:findFirst

归约操作/折叠操作:reduce,接受两个参数,一个初始值,一个BinaryOperator来将两个元素结合起来产生一个新值,也可以只接受后者,返回一个Optional对象

数值流

原始类型流特化:IntStream,DoubleStream,LongStream

流的使用:

1. 一个数据源(如集合)来执行一个查询

2. 一个中间操作链,形成一条流的流水线

3. 一个终端操作,执行流水线,并能生成结果



短路:&& ||运算符

 循环合并


你可能感兴趣的:(Java)