day22-JDK新特性
Lambda表达式
面象对象思想:
做一件事情,找一个能解决这个事情的对象,调用这个对象的方法,完成事情
函数式编程思想:
只要能获取到结果,谁去做的,怎么做的都不重要,重视的是结果,不重视过程
函数式接口
有且仅有一个抽象方法的接口,也可以有默认方法,静态方法,私有方法
函数式接口的使用
一般用作方法的参数和返回值类型
Lambda标准格式
格式
(形式参数) -> { 代码块 }
格式解析
形式参数
:如果有多个参数,参数之间用逗号隔开;如果没有参数,留空即可
->
:由英文中画线和大于符号组成,固定写法。代表指向动作
代码块
:是我们具体要做的事情,也就是以前我们写的方法体内容
@FunctionalInterface
检测该接口是不是一个函数式接口
练习
eg:
无参无返回值
方式一 : show(()->{
System.out.println();
})
方式二:show(()-> System.out.println())
public void show(函数接口 s){
s.函数接口的抽象方法();
}
一个参无返回值
方式一:show( a ->{
System.out.println();
})
方式二:show( a -> System.out.println())
public void show(函数接口 s){
s.函数接口的抽象方法(a);
}
下面只举方式二的多参有返回值的例子
show((a,b)-> a+b);
public void show(函数接口 s){
数据类型 nn = s.函数接口的抽象方法(a,b);
}
方法引用
在使用Lambda表达式时,经常会看到双冒号(::)符号的使用,这个符号表示方法引用
略
Stream流
==Stream流的好处==
-
直接阅读代码的字面意思即可完美展示无关逻辑方式的语义:获取流、过滤姓张、过滤长度为3、逐一打印
-
Stream流把真正的函数式编程风格引入到Java中
获取Stream流的三种方式
-
Collection体系集合
使用默认方法stream()生成流, default Stream<E> stream()
-
Map体系集合
把Map转成Set集合,间接的生成流
-
数组
通过Stream接口的静态方法of(T... values)生成流
Stream流中间操作方法
常见方法
方法名 | 说明 |
---|---|
Stream<T> filter(Predicate predicate) | 用于对流中的数据进行过滤 |
Stream<T> limit(long maxSize) | 返回此流中的元素组成的流,截取前指定参数个数的数据 |
Stream<T> skip(long n) | 跳过指定参数个数的数据,返回由该流的剩余元素组成的流 |
static <T> Stream<T> concat(Stream a, Stream b) | 合并a和b两个流为一个流 |
Stream<T> distinct() | 返回由该流的不同元素(根据Object.equals(Object) )组成的流 |
Stream<T> sorted() | 返回由此流的元素组成的流,根据自然顺序排序 |
<R> Stream<R> map(Function mapper) | 返回由给定函数应用于此流的元素的结果组成的流 |
IntStream mapToInt(ToIntFunction mapper) | 返回一个IntStream其中包含将给定函数应用于此流的元素的结果 |
注意
一般像 s -> Integer.parseInt(s) 这种形式的 都可以 使用 Integer::parseInt 来替代
Stream流终结操作方法
注意
一旦Stream调用了终结方法,流的操作就全部终结了,不能继续使用,只能创建新的Stream操作。 终结方法: foreach , count
相关方法
方法名 | 说明 |
---|---|
void forEach(Consumer action) | 对此流的每个元素执行操作 |
long count() | 返回此流中的元素数 |
Stream流的收集操作
常用方法
方法名 | 说明 |
---|---|
R collect(Collector collector) | 把结果收集到集合中 |
-
==工具类Collectors提供了具体的收集方式==
方法名 | 说明 |
---|---|
public static <T> Collectors toList() | 把元素收集到List集合中 |
public static <T> Collectors toSet() | 把元素收集到Set集合中 |
public static Collectors toMap(Function keyMapper,Function valueMapper) | 把元素收集到Map集合中 |