文章目录
1、函数式接口
定义:只包含一个抽象方法的接口,称为函数式接口
常见的函数式接口举例:
我们可以在一个接口上使用
@FunctionalInterface
注解,这样做可以检
查它是否是一个函数式接口。比如我们创建一个接口,里面定义两个抽象方法后家上注解,但是这样会发现编译就会报错,因为它并不是函数式接口
2、Lambda表达式(重点)
表达式语法:
Lambda 表达式:在Java 8 语言中引入的一种新的语法元素和操作符。
这个操作符为 “
->
” , 该操作符被称为 Lambda 操作符或箭头操作符。它将 Lambda 分为两个部分:
- 左侧:指定了 Lambda 表达式需要的参数列表
- 右侧:指定了 Lambda 体,是抽象方法的实现逻辑,也即 Lambda 表达式要执行的功能
举例:
Lambda表达式本质:
就是接口实现类对象,接口必须是函数式接口(可以理解为只有一个抽象方法的接口)
总结:Lambda表达式针对的是函数式接口,当我们想要为接口提供实现类对象时,可以使用该表达式,由于接口只有一个抽象方法,所以我们创建使用表达式时候就不需要知道方法名字是什么,不会有歧义!
3、方法引用
方法引用可以看做是Lambda表达式深层次的表达。
换句话说,方法引用就是Lambda表达式,也就是函数式接口的一个实例,通过方法的名字来指向一个方法,可以认为是Lambda表达式的另一种形式
使用场景:
实现接口的抽象方法的参数列表和返回值类型,必须与方法引用的方法的参数列表和返回值类型保持一致!
说白了,就是函数式接口的参数类型+返回值类型与别的类方法的参数类型+返回值类型一样,才可以使用方法引用
如下主要使用情况:
对象::实例方法名
类::静态方法名
代码举例:
@FunctionalInterfacepublicinterfaceLambdaTest{StringinterMethod(String a);}classMethodClass{publicStringclaMethod1(String a){return a;}publicstaticStringclaMethod2(String a){return a +"hello";}publicStringclaMethod3(String a){System.out.println(a);return a;}}classTestClass{publicstaticvoidmain(String[] args){//LambdaTest test1 = a -> a;//1.对象::实例方法名MethodClass methodClass =newMethodClass();LambdaTest test1 = methodClass::claMethod1;System.out.println(test1.interMethod("yes"));//2.类::静态方法名LambdaTest test2 =MethodClass::claMethod2;System.out.println(test2.interMethod("world"));}}
4、Stream流(重点)
Stream流作用:简而言之一句话,Stream是程序员非常简便丝滑的操作集合
Stream流的学习主要就是三步:
数据源 ——> 数据处理 ——> 收集结果
数据源就是Stream流想要处理的数据,例如List集合
数据处理就是Stream流对数据进行相应的处理
收集结果就是处理后的结果进行收集
代码举例:
publicclassStreamApi{publicstaticvoidmain(String[] args){//1.filter过滤:把list中长度大于5的字符串输出List<String> list =Arrays.asList("Hello","World","Java");
list.stream().filter(str -> str.length()>4).forEach(str ->System.out.println(str));//2.limit范围:list中只选前两个数据输出
list.stream().limit(2).forEach(str ->System.out.println(str));//3.sorted排序:将list排序进行输出(默认升序,方法中传Comparator.reverseOrder()进行降序排列)List<Integer> numList =Arrays.asList(1,1,6,2,3,5,4);
numList.stream().sorted().forEach(num ->System.out.println(num));//4.map映射:把一个流中的元素转化成新的流中的元素,比如这里将list中int元素变成字符串然后输出//把 Stream<Integer> 的流转成一个 Stream<String> 的流
numList.stream().map(num -> num +"").forEach(num ->System.out.println(num));//5.reduce:把 Stream 中的元素组合起来Integer result = numList.stream().reduce((sum, num)-> sum += num).get();//6.collect:基于目标集合生成新的集合,这里我们取出所有偶数List<Integer> collect = numList.stream().filter(num -> num %2==0).collect(Collectors.toList());//7.distinct:去重list中数据List<Integer> disList = numList.stream().distinct().collect(Collectors.toList());}}
版权归原作者 Coder Xu 所有, 如有侵权,请联系我们删除。