Lambda表达式基础知识

  • 介绍

Lambda表达式是一种匿名函数方式。虽然没有名称,但是包含参数列表、函数主体、返回类型、异常列表(可选)。Lambda表达式包含三个部分参数列表、箭头、函数主体。其中箭头的作用是将参数列表与函数主体分隔开,函数主体为Lambda返回值。列如:(String s) -> s.length()。下面是Lambda的三种可用方式。

()->{}
()->""
()->{return ""}

Lambda的简单使用案列

使用案列 Lambda示列
布尔类型 (String s) -> s.equals("")
创建对象 () -> new Int[3]
操作对象 (String s) -> {
System.out.println(s);
}
从一个对象中选取/抽取 (List<String> list)->list.length>10
组合俩个值 (String str1,String str2)->str1+str2
比较俩个对象 (String s1,String s2)->s1.length().compareTo(s2.length())

函数式接口:定义一个抽象方法的接口。意义:Lambda表达式允许你直接以内联的形式为函数式接口的抽象方法提供实现,并把整个表达式作为函数式接口实例。也可以说是函数式的一个具体实现的实例。函数式接口的抽象方法的返回值就是Lambda表达式的返回值。

函数描述符:函数式接口的抽象方法叫作函数描述符。

任何函数式接口都不允许抛出受检异常,如果你需要Lambda表达式抛出异常,有俩种办法:1.自己定义一个函数式接口,并声明受检异常。2.把Lambda包在一个try/catch块中。

  • Lambda表达式的三种函数引用
  1. 指向静态方法的方法引用(Integer::parseInt)。
  2. 指向任意类型实例方法的方法引用(String::length)。
  3. 指向现有对象的实例方法的方法引用
  • 比较复合器的几种类型
  1. 默认为递增排序。Comparator.comparing(Apple::getWeight);
  2. 逆序。Comparator.comparing(Apple::getWeight).reversed();
  3. 比较链。当第一个比较条件存在俩个相同时,第二个排序条件。comparing(Apple::getWeight) .reversed() ←─按重量递减排序 .thenComparing(Apple::getProduct)←─重量相同,按产量排序
  • Lambda表达式的negate、and 、or

negate、and 、or对于条件的选择和叠加。and和or方法是按照在表达式链中的位置,从左向右确定优先级的。a.or(b).and(c)可以看作(a || b) && c。而negate类似于‘非’操作。

  • 函数复合

Function接口所代表的Lambda表达式复合起来。Function接口为此配了andThen和compose两个默认方法,它们都会返回Function的一个实例。

andThen:方法会返回一个函数,它先对输入应用一个给定函数,再对输出应用另一个函数。函数f和g,f.andThen(g):先执行f在执行g。

compose:先把给定的函数用作compose的参数里面给的那个函数,然后再把函数本身用于结果。f.compose(g):先执行g再执行f。

版权声明:
作者:Gomo
链接:https://www.develophm.com/index.php/lambda%e8%a1%a8%e8%be%be%e5%bc%8f%e5%9f%ba%e7%a1%80%e7%9f%a5%e8%af%86/266/
来源:开发之家
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>