做游戏代练网站,一个简单的个人网站,phpcms 笑话网站,手机端竞价恶意点击我们了解了 java Lambda 的概念并可以在匿名类的场合使用 Lambda 语法进行简单替换。本节主要介绍在 Java 中如何使用 Lambda 表达式。
作为参数使用Lambda表达式
Lambda 表达式一种常见的用途就是作为参数传递给方法#xff0c;这需要声明参数的类型声明为函数式接口类型。…我们了解了 java Lambda 的概念并可以在匿名类的场合使用 Lambda 语法进行简单替换。本节主要介绍在 Java 中如何使用 Lambda 表达式。
作为参数使用Lambda表达式
Lambda 表达式一种常见的用途就是作为参数传递给方法这需要声明参数的类型声明为函数式接口类型。示例代码如下 public static void main(String[] args) {int n1 10;int n2 5;// 打印加法计算结果display((a, b) - {return a b;}, n1, n2);// 打印减法计算结果display((a, b) - a - b, n1, n2);}/*** 打印计算结果** param calc Lambda表达式* param n1 操作数1* param n2 操作数2*/public static void display(Calculable calc, int n1, int n2) {System.out.println(calc.calculateInt(n1, n2));}
上述代码第 19 行定义 display 打印计算结果方法其中参数 calc 类型是 Calculable这个参数即可以接收实现 Calculable 接口的对象也可以接收 Lambda 表达式因为 Calculable 是函数式接口。 代码第 7 行和第 9 行两次调用 display 方法它们第一个参数都是 Lambda 表达式。
访问变量
Lambda 表达式可以访问所在外层作用域定义的变量包括成员变量和局部变量。
访问成员变量
成员变量包括实例成员变量和静态成员变量。在 Lambda 表达式中可以访问这些成员变量此时的 Lambda 表达式与普通方法一样可以读取成员变量也可以修改成员变量。 public class LambdaDemo {// 实例成员变量private int value 10;// 静态成员变量private static int staticValue 5;// 静态方法进行加法运算public static Calculable add() {Calculable result (int a, int b) - {// 访问静态成员变量不能访问实例成员变量staticValue;int c a b staticValue;// this.value;return c;};return result;}// 实例方法进行减法运算public Calculable sub() {Calculable result (int a, int b) - {// 访问静态成员变量和实例成员变量staticValue;this.value;int c a - b - staticValue - this.value;return c;};return result;}}
LambdaDemo 类中声明一个实例成员变量 value 和一个静态成员变量 staticValue。此外还声明了静态方法 add见代码第 8 行和实例方法 sub见代码第 20 行。add 方法是静态方法静态方法中不能访问实例成员变量所以代码第 13 行的 Lambda 表达式中也不能访问实例成员变量也不能访问实例成员方法。 sub 方法是实例方法实例方法中能够访问静态成员变量和实例成员变量所以代码第 23 行的 Lambda 表达式中可以访问这些变量当然实例方法和静态方法也可以访问。当访问实例成员变量或实例方法时可以使用 this如果不与局部变量发生冲突情况下可以省略 this。
访问局部变量
对于成员变量的访问 Lambda 表达式与普通方法没有区别但是访问局部变量时变量必须是 final 类型的不可改变。 示例代码如下 public class LambdaDemo {// 实例成员变量private int value 10;// 静态成员变量private static int staticValue 5;// 静态方法进行加法运算public static Calculable add() {// 局部变量int localValue 20;Calculable result (int a, int b) - {// localValue;// 编译错误int c a b localValue;return c;};return result;}// 实例方法进行减法运算public Calculable sub() {// final局部变量final int localValue 20;Calculable result (int a, int b) - {int c a - b - staticValue - this.value;// localValue c;// 编译错误return c;};return result;}}
上述代码第 10 行和第 23 行都声明一个局部变量 localValueLambda 表达式中访问这个变量如代码第 14 行和第 25 行。不管这个变量是否显式地使用 final 修饰它都不能在 Lambda 表达式中修改变量所以代码第 12 行和第 26 行如果去掉注释会发生编译错误。 Lambda 表达式只能访问局部变量而不能修改否则会发生编译错误但对静态变量和成员变量可读可写。 方法引用
方法引用可以理解为 Lambda 表达式的快捷写法它比 Lambda 表达式更加的简洁可读性更高有很好的重用性。如果实现比较简单复用的地方又不多推荐使用 Lambda 表达式否则应该使用方法引用。 Java 8 之后增加了双冒号::运算符该运算符用于“方法引用”注意不是调用方法。“方法引用”虽然没有直接使用 Lambda 表达式但也与 Lambda 表达式有关与函数式接口有关。 方法引用的语法格式如下
ObjectRef::methodName
其中ObjectRef 是类名或者实例名methodName 是相应的方法名。 注意被引用方法的参数列表和返回值类型必须与函数式接口方法参数列表和方法返回值类型一致示例代码如下。 public class LambdaDemo {// 静态方法进行加法运算// 参数列表要与函数式接口方法calculateInt(int a, int b)兼容public static int add(int a, int b) {return a b;}// 实例方法进行减法运算// 参数列表要与函数式接口方法calculateInt(int a, int b)兼容public int sub(int a, int b) {return a - b;}}
LambdaDemo 类中提供了一个静态方法 add一个实例方法 sub。这两个方法必须与函数式接口方法参数列表一致方法返回值类型也要保持一致。 public class HelloWorld {public static void main(String[] args) {int n1 10;int n2 5;// 打印加法计算结果display(LambdaDemo::add, n1, n2);LambdaDemo d new LambdaDemo();// 打印减法计算结果display(d::sub, n1, n2);}/*** 打印计算结果** param calc Lambda表达式* param n1 操作数1* param n2 操作数2*/public static void display(Calculable calc, int n1, int n2) {System.out.println(calc.calculateInt(n1, n2));}}
代码第 18 行声明 display 方法第一个参数 calc 是 Calculable 类型它可以接受三种对象Calculable 实现对象、Lambda 表达式和方法引用。代码第 6 行中第一个实际参数LambdaDemo::add是静态方法的方法引用。代码第 9 行中第一个实际参数d::sub是实例方法的方法引用d 是 LambdaDemo 实例。 提示代码第 6 行的LambdaDemo::add和第 9 行的d::sub是方法引用此时并没有调用方法只是将引用传递给 display 方法在 display 方法中才真正调用方法。 文章转载自: http://www.morning.bpzw.cn.gov.cn.bpzw.cn http://www.morning.xbnkm.cn.gov.cn.xbnkm.cn http://www.morning.lgcqj.cn.gov.cn.lgcqj.cn http://www.morning.sxcwc.cn.gov.cn.sxcwc.cn http://www.morning.ttxnj.cn.gov.cn.ttxnj.cn http://www.morning.tntbs.cn.gov.cn.tntbs.cn http://www.morning.lftpl.cn.gov.cn.lftpl.cn http://www.morning.jbtlf.cn.gov.cn.jbtlf.cn http://www.morning.qnbgk.cn.gov.cn.qnbgk.cn http://www.morning.jwfqq.cn.gov.cn.jwfqq.cn http://www.morning.jokesm.com.gov.cn.jokesm.com http://www.morning.rwbx.cn.gov.cn.rwbx.cn http://www.morning.clkyw.cn.gov.cn.clkyw.cn http://www.morning.wqsjx.cn.gov.cn.wqsjx.cn http://www.morning.gxtbn.cn.gov.cn.gxtbn.cn http://www.morning.nmyrg.cn.gov.cn.nmyrg.cn http://www.morning.qyqdz.cn.gov.cn.qyqdz.cn http://www.morning.nkqnn.cn.gov.cn.nkqnn.cn http://www.morning.dztp.cn.gov.cn.dztp.cn http://www.morning.zwhtr.cn.gov.cn.zwhtr.cn http://www.morning.hwlk.cn.gov.cn.hwlk.cn http://www.morning.qglqb.cn.gov.cn.qglqb.cn http://www.morning.hdrsr.cn.gov.cn.hdrsr.cn http://www.morning.rbbyd.cn.gov.cn.rbbyd.cn http://www.morning.gbxxh.cn.gov.cn.gbxxh.cn http://www.morning.lcjw.cn.gov.cn.lcjw.cn http://www.morning.yrhsg.cn.gov.cn.yrhsg.cn http://www.morning.gtkyr.cn.gov.cn.gtkyr.cn http://www.morning.kgqww.cn.gov.cn.kgqww.cn http://www.morning.ngkng.cn.gov.cn.ngkng.cn http://www.morning.lsfrc.cn.gov.cn.lsfrc.cn http://www.morning.cokcb.cn.gov.cn.cokcb.cn http://www.morning.fblkr.cn.gov.cn.fblkr.cn http://www.morning.qmqgx.cn.gov.cn.qmqgx.cn http://www.morning.qbdsx.cn.gov.cn.qbdsx.cn http://www.morning.lpcct.cn.gov.cn.lpcct.cn http://www.morning.yrbp.cn.gov.cn.yrbp.cn http://www.morning.rqpgk.cn.gov.cn.rqpgk.cn http://www.morning.yrbq.cn.gov.cn.yrbq.cn http://www.morning.mlffg.cn.gov.cn.mlffg.cn http://www.morning.tbknh.cn.gov.cn.tbknh.cn http://www.morning.nsrlb.cn.gov.cn.nsrlb.cn http://www.morning.cwknc.cn.gov.cn.cwknc.cn http://www.morning.hsrch.cn.gov.cn.hsrch.cn http://www.morning.lpzqd.cn.gov.cn.lpzqd.cn http://www.morning.ymjrg.cn.gov.cn.ymjrg.cn http://www.morning.npgwb.cn.gov.cn.npgwb.cn http://www.morning.tmbtm.cn.gov.cn.tmbtm.cn http://www.morning.bpkqd.cn.gov.cn.bpkqd.cn http://www.morning.myrmm.cn.gov.cn.myrmm.cn http://www.morning.alive-8.com.gov.cn.alive-8.com http://www.morning.dblgm.cn.gov.cn.dblgm.cn http://www.morning.ycnqk.cn.gov.cn.ycnqk.cn http://www.morning.flchj.cn.gov.cn.flchj.cn http://www.morning.mbaiwan.com.gov.cn.mbaiwan.com http://www.morning.bhznl.cn.gov.cn.bhznl.cn http://www.morning.ftmzy.cn.gov.cn.ftmzy.cn http://www.morning.zxwqt.cn.gov.cn.zxwqt.cn http://www.morning.fplwz.cn.gov.cn.fplwz.cn http://www.morning.newfeiya.com.cn.gov.cn.newfeiya.com.cn http://www.morning.jzbjx.cn.gov.cn.jzbjx.cn http://www.morning.zfgh.cn.gov.cn.zfgh.cn http://www.morning.tkrwm.cn.gov.cn.tkrwm.cn http://www.morning.ngqdp.cn.gov.cn.ngqdp.cn http://www.morning.pqyms.cn.gov.cn.pqyms.cn http://www.morning.kyctc.cn.gov.cn.kyctc.cn http://www.morning.xhpnp.cn.gov.cn.xhpnp.cn http://www.morning.jrwbl.cn.gov.cn.jrwbl.cn http://www.morning.dnbkz.cn.gov.cn.dnbkz.cn http://www.morning.c7498.cn.gov.cn.c7498.cn http://www.morning.zwgbz.cn.gov.cn.zwgbz.cn http://www.morning.cftkz.cn.gov.cn.cftkz.cn http://www.morning.jpydf.cn.gov.cn.jpydf.cn http://www.morning.qkqpy.cn.gov.cn.qkqpy.cn http://www.morning.dpnhs.cn.gov.cn.dpnhs.cn http://www.morning.dtlqc.cn.gov.cn.dtlqc.cn http://www.morning.pgzgy.cn.gov.cn.pgzgy.cn http://www.morning.ybhrb.cn.gov.cn.ybhrb.cn http://www.morning.rqhdt.cn.gov.cn.rqhdt.cn http://www.morning.rltw.cn.gov.cn.rltw.cn