java8新特性Lambda和Stream

四大内置核心函数式接口

  • Consumer 消费型接口 void accept(T t);
  • Supplier 供给型接口 T get();
  • Function 函数型接口 R apply(T t);
  • Predicate 断言型接口 boolean test(T t);

lambda方法引用与构造器引用

一:方法引用:

若lambda体中的内容有方法已经实现了,我们可以使用"方法引用"
(可以理解为方法引用是lambda表达式的另外一种表现形式)
主要有三种语法格式
对象::实例方法
类::静态方法
类::实例方法
注意:
①lambda体中调用方法的参数列表与返回值类型,要与函数式接口中抽象方法的函数列表和返回值类型保持一致
②若lambda 参数列表中的第一参数是实例方法的调用者,而第二个参数是实例方法的参数时,可以使用ClassName::method
(第二个参数可以为空,此时实例方法中无参数)

二:构造器引用

格式:ClassName::new
注意:需要调用的构造器的参数列表要与函数式接口中抽象方法的参数列表保持一致

三:数组引用

Type[]::new

Stream的三个操作步骤

  • 创建Stream
  • 中间操作
  • 终止操作(终端操作)

中间操作

筛选与切片
filter-接受lambda,从流中排除某些元素。
limit-截断流,使其元素不超过给定的数量。
skip(n) - 跳过元素,返回一个扔掉了前n个元素的流。若流中元素不足n个,则返回一个空流。与limit(n)互补
distinct-筛选,通过流锁生成元素的hashCode()和equals()去除重复元素
映射
map-接收lambda,将元素转换成其他形式或提取信息。接收一个函数作为参数,该函数会被应用到每个元素上,并将其映射成一个新元素。
flatMap-接收一个函数作为参数,将流中的每一个值都换成另一个流,然后把所有流连接成一个流
排序
sorted()-自然排序(Comparable)
sorted(Comparator com)-定制排序
终止操作
查找与匹配
allMatch-检查是否匹配所有元素
anyMatch-检查是否至少匹配一个元素
noneMatch-检查是否没有匹配所有元素
findFirst-返回第一个元素
findAny-返回当前流中的任意元素
count-返回流中元素的总个数
max-返回流中最大值
min-返回流中最小值
归约
reduce(T identity, BinaryOperator) / reduce(BinaryOperator)-可以将流中元素反复结合起来,得到一个值。
收集
collect-将流转换为其他形式,接收一个Collector接口的实现,用于给Stream中元素做汇总的方法
Collectors收集器:想要按照一个什么方式进行结果的收集操作
ex:Collectors.toList()、Collectors.toSet()、Collectors.toCollection(HashSet::new)
分组:Collectors.groupingBy() 可以多级分组
分区:Collectors.partitioningBy() 也可以用分组实现
连接:Collectors.joining
计算:Collectors.summarizingXXX
注:分组、分区、连接、多用于对list中的对象里的属性分类提取操作

你可能感兴趣的:(java8新特性Lambda和Stream)