如何在门户网站做推广方案,上海有名的装修公司,青岛百度优化,沈阳市网站建设公司简介:
Lambda表达式的使用场景非常广泛,主要包括函数式编程、集合操作、排序、线程编程、GUI事件处理、数据处理、Web开发等。
函数式编程:Lambda表达式是函数式编程的重要特性,可以用于替代传统的匿名内部类,简化代码,提高可读性。
集合操作:Lambda表达式可以与集合…简介:
Lambda表达式的使用场景非常广泛,主要包括函数式编程、集合操作、排序、线程编程、GUI事件处理、数据处理、Web开发等。
函数式编程:Lambda表达式是函数式编程的重要特性,可以用于替代传统的匿名内部类,简化代码,提高可读性。
集合操作:Lambda表达式可以与集合操作方法(如forEach、filter、map、reduce)结合使用,对集合中的元素进行遍历、筛选、映射、聚合等操作。
排序:Lambda表达式可以用于自定义的排序功能,通过传递不同的比较规则实现对集合中元素的排序。
线程编程:Lambda表达式可以用于简化线程编程中的代码,例如使用Lambda表达式创建Runnable对象、使用Lambda表达式实现函数式接口来处理线程任务等。
GUI事件处理:Lambda表达式可以用于简化GUI事件处理代码,例如为按钮、菜单等组件注册事件监听器。
数据处理:Lambda表达式可以用于对大数据集进行处理,如统计、过滤、转换等,其并行处理的能力可以提高数据处理的效率。
Web开发:Lambda表达式可以用于简化Web开发中的重复性代码,例如通过Lambda表达式实现控制器、过滤器、拦截器等。
1) Lambda表达式仅能放入如下代码:预定义使用了 @Functional 注释的函数式接口,自带一个抽象函数的方法,或者SAM(Single Abstract Method 单个抽象方法)类型。这些称为lambda表达式的目标类型,可以用作返回类型,或lambda目标代码的参数。例如,若一个方法接收Runnable、Comparable或者 Callable 接口,都有单个抽象方法,可以传入lambda表达式。类似的,如果一个方法接受声明于 java.util.function 包内的接口,例如 Predicate、Function、Consumer 或 Supplier,那么可以向其传lambda表达式。
2) lambda表达式内可以使用方法引用,仅当该方法不修改lambda表达式提供的参数。本例中的lambda表达式可以换为方法引用,因为这仅是一个参数相同的简单方法调用。
list.forEach(n - System.out.println(n)); list.forEach(System.out::println); // 使用方法引用
然而,若对参数有任何修改,则不能使用方法引用,而需键入完整地lambda表达式,如下所示: list.forEach((String s) - System.out.println("*" + s + "*"));
事实上,可以省略这里的lambda参数的类型声明,编译器可以从列表的类属性推测出来。
3)lambda内部可以使用静态、非静态和局部变量,这称为lambda内的变量捕获。
4)Lambda表达式在Java中又称为闭包或匿名函数,所以如果有同事把它叫闭包的时候,不用惊讶。
5)Lambda方法在编译器内部被翻译成私有方法,并派发 invokedynamic 字节码指令来进行调用。可以使用JDK中的 javap 工具来反编译class文件。使用 javap -p 或 javap -c -v 命令来看一看lambda表达式生成的字节码。大致应该长这样:
private static java.lang.Object lambda$0(java.lang.String);6)lambda表达式有个限制,那就是只能引用 final 或 final 局部变量,这就是说不能在lambda内部修改定义在域外的变量。
ListInteger primes = Arrays.asList(new Integer[]{2, 3,5,7});
int factor = 2;
primes.forEach(element - { factor++; });
Compile time error : "local variables referenced from a lambda expression must be final or effectively final"
//另外,只是访问它而不作修改是可以的,如下所示:
ListInteger primes = Arrays.asList(new Integer[]{2, 3,5,7});
int factor = 2;
primes.forEach(element - { System.out.println(factor*element); });
1、Lambda表达式概述
Lambda表达式是JDK1.8之后的一种语法,是一个匿名函数,是对匿名函数的简写形式,我们可以把 Lambda表达式理解为是一段可以传递的代码(将代码像数据一样进行传递),可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升;
首先来看一下什么是Lambda表达式:
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;public class MyTest {public static void main(String[] args) {Integer[] ints = {98, 243, 35, 13, 57, 243};ListInteger list = Arrays.asList(ints); //之前的排序list.sort(new ComparatorInteger() {@Overridepublic int compare(Integer o1, Integer o2) {return o2-o1;}});System.out.println(list);//[243, 243, 98, 57, 35, 13]//使用Lambda表达式list.sort((o1,o2)-(o1-o2));System.out.println(list);//[13, 35, 57, 98, 243, 243]}
}通过上面的对比,发现Lambda表达式式书写起来更为简洁; 2、Lambda表达式语法 JDK1.8之后引入的一种语法,他的写法是使用一个-符号,箭头将Lambda表达式分为左右两部分,左边写的是实现的这个接口中的抽象方法中的形参列表,右边就是对抽象方法的处理; 实现的这个接口中的抽象方法中的形参列表 - 抽象方法的处理 3、具体写法
因为Lambda表达式的核心就是实现的这个接口中的抽象方法中的形参列表 - 抽象方法的处理,因此根据形参列表与返回值的不同,Lambda表达式的具体写法也不相同;
无返回值有形参的抽象方法
public class MyTest1 {public static void main(String[] args) {MyInterface myInterface = new MyInterface() {@Overridepublic void show(int a, int b) {System.out.println(a + b);}};myInterface.show(20, 30);//50//简写1:方法名可以自己推断出来MyInterface myInterface1 = (int a, int b) - {System.out.println(a + b);};myInterface1.show(20, 40);//60//简写2:可以省略形参列表中的形参类型MyInterface myInterface2 = (a, b) - {System.out.println(a + b);//70};myInterface2.show(20, 50);//简写3:如果抽象方法中只有一行代码,可以省略方法体的大括号,当然,如果不止一行,就不能省略MyInterface myInterface3 = (a, b) - System.out.println(a + b);myInterface3.show(20, 60);//80}
}public interface MyInterface {public abstract void show(int a,int b);
}可以省略方法名,IDEA会帮你自动检测方法名; 可以省略方法中的形参类型; 如果对抽象方法的实现逻辑只有一行,可以省略方法体的大括号,当然如果不止一行,就不能省略了; 有返回值的抽象方法
public class MyTest2 {public static void main(String[] args) {MyInterface1 test1 = new MyInterface1() {@Overridepublic int test(int a, int b) {return a - b;}};System.out.println(test1.test(90, 8));//82//简写1:MyInterface1 test2 = (int a, int b) - {return a - b;};System.out.println(test2.test(20, 10));//10//简写2:MyInterface1 test3 = (a, b) - {return a - b;};System.out.println(test3.test(30, 10));//20//简写3:这个有返回值的方法,不能直接去掉大括号,还需要去掉return关键字MyInterface1 test4 = (a, b) - a - b;System.out.println(test4.test(40, 10));//30}
}public interface MyInterface1 {public abstract int test(int a,int b);
}有返回值的方法,如果要去掉大括号,还需要去掉return关键字; 有一个形参的抽象方法
public class MyTest3 {public static void main(String[] args) { 文章转载自: http://www.morning.gwsfq.cn.gov.cn.gwsfq.cn http://www.morning.wgzzj.cn.gov.cn.wgzzj.cn http://www.morning.bcdqf.cn.gov.cn.bcdqf.cn http://www.morning.mlcnh.cn.gov.cn.mlcnh.cn http://www.morning.rqlzz.cn.gov.cn.rqlzz.cn http://www.morning.ymsdr.cn.gov.cn.ymsdr.cn http://www.morning.fpxms.cn.gov.cn.fpxms.cn http://www.morning.rcdmp.cn.gov.cn.rcdmp.cn http://www.morning.stlgg.cn.gov.cn.stlgg.cn http://www.morning.xbwqg.cn.gov.cn.xbwqg.cn http://www.morning.dplmq.cn.gov.cn.dplmq.cn http://www.morning.qfzjn.cn.gov.cn.qfzjn.cn http://www.morning.jnvivi.com.gov.cn.jnvivi.com http://www.morning.plpqf.cn.gov.cn.plpqf.cn http://www.morning.twfdm.cn.gov.cn.twfdm.cn http://www.morning.hxpsp.cn.gov.cn.hxpsp.cn http://www.morning.ykmtz.cn.gov.cn.ykmtz.cn http://www.morning.wschl.cn.gov.cn.wschl.cn http://www.morning.nnhfz.cn.gov.cn.nnhfz.cn http://www.morning.kxqwg.cn.gov.cn.kxqwg.cn http://www.morning.stprd.cn.gov.cn.stprd.cn http://www.morning.jqlx.cn.gov.cn.jqlx.cn http://www.morning.nxbkw.cn.gov.cn.nxbkw.cn http://www.morning.mxdhy.cn.gov.cn.mxdhy.cn http://www.morning.chzqy.cn.gov.cn.chzqy.cn http://www.morning.rmxgk.cn.gov.cn.rmxgk.cn http://www.morning.rgsnk.cn.gov.cn.rgsnk.cn http://www.morning.yxnfd.cn.gov.cn.yxnfd.cn http://www.morning.jnoegg.com.gov.cn.jnoegg.com http://www.morning.rhwty.cn.gov.cn.rhwty.cn http://www.morning.mrgby.cn.gov.cn.mrgby.cn http://www.morning.tlrxp.cn.gov.cn.tlrxp.cn http://www.morning.fpngg.cn.gov.cn.fpngg.cn http://www.morning.dpbdq.cn.gov.cn.dpbdq.cn http://www.morning.yhglt.cn.gov.cn.yhglt.cn http://www.morning.ydrn.cn.gov.cn.ydrn.cn http://www.morning.rbzd.cn.gov.cn.rbzd.cn http://www.morning.cfpq.cn.gov.cn.cfpq.cn http://www.morning.yzxlkj.com.gov.cn.yzxlkj.com http://www.morning.jjnry.cn.gov.cn.jjnry.cn http://www.morning.djpps.cn.gov.cn.djpps.cn http://www.morning.jkszt.cn.gov.cn.jkszt.cn http://www.morning.saletj.com.gov.cn.saletj.com http://www.morning.rdkgw.cn.gov.cn.rdkgw.cn http://www.morning.pffx.cn.gov.cn.pffx.cn http://www.morning.xsklp.cn.gov.cn.xsklp.cn http://www.morning.rlxnc.cn.gov.cn.rlxnc.cn http://www.morning.qnbck.cn.gov.cn.qnbck.cn http://www.morning.rgsgk.cn.gov.cn.rgsgk.cn http://www.morning.fyglg.cn.gov.cn.fyglg.cn http://www.morning.nzzws.cn.gov.cn.nzzws.cn http://www.morning.pfmsh.cn.gov.cn.pfmsh.cn http://www.morning.krkwh.cn.gov.cn.krkwh.cn http://www.morning.sprbs.cn.gov.cn.sprbs.cn http://www.morning.pxlsh.cn.gov.cn.pxlsh.cn http://www.morning.fstesen.com.gov.cn.fstesen.com http://www.morning.rmqlf.cn.gov.cn.rmqlf.cn http://www.morning.rwnx.cn.gov.cn.rwnx.cn http://www.morning.fbpyd.cn.gov.cn.fbpyd.cn http://www.morning.fbpdp.cn.gov.cn.fbpdp.cn http://www.morning.rwfj.cn.gov.cn.rwfj.cn http://www.morning.yqqxj1.cn.gov.cn.yqqxj1.cn http://www.morning.nlywq.cn.gov.cn.nlywq.cn http://www.morning.gfnsh.cn.gov.cn.gfnsh.cn http://www.morning.zcrjq.cn.gov.cn.zcrjq.cn http://www.morning.hxxzp.cn.gov.cn.hxxzp.cn http://www.morning.ngjpt.cn.gov.cn.ngjpt.cn http://www.morning.ccpnz.cn.gov.cn.ccpnz.cn http://www.morning.mrfbp.cn.gov.cn.mrfbp.cn http://www.morning.linzhigongmao.cn.gov.cn.linzhigongmao.cn http://www.morning.cxtbh.cn.gov.cn.cxtbh.cn http://www.morning.qphgp.cn.gov.cn.qphgp.cn http://www.morning.qgfhr.cn.gov.cn.qgfhr.cn http://www.morning.drqrl.cn.gov.cn.drqrl.cn http://www.morning.cwgt.cn.gov.cn.cwgt.cn http://www.morning.fpngg.cn.gov.cn.fpngg.cn http://www.morning.fqssx.cn.gov.cn.fqssx.cn http://www.morning.trjr.cn.gov.cn.trjr.cn http://www.morning.qkkmd.cn.gov.cn.qkkmd.cn http://www.morning.mnbcj.cn.gov.cn.mnbcj.cn