当前位置: 首页 > wzjs >正文

经济研究院网站建设方案网站建设jz518

经济研究院网站建设方案,网站建设jz518,网络营销的作用,珠海网站备案要了解Lambda表达式,首先需要了解什么是函数式接口,函数式接口定义:一个接口有且只有一个抽象方法 。 一、函数式接口 1.FunctionalInterger 注意: 1. 如果一个接口只有一个抽象方法,那么该接口就是一个函数式接口 2. 如果我们…

要了解Lambda表达式,首先需要了解什么是函数式接口,函数式接口定义:一个接口有且只有一个抽象方法 。

一、函数式接口

1.@FunctionalInterger

注意:

1. 如果一个接口只有一个抽象方法,那么该接口就是一个函数式接口
2. 如果我们在某个接口上声明了 @FunctionalInterface 注解,那么编译器就会按照函数式接口的定义来要求该接口,这样如果有两个抽象方法,程序编译就会报错的。所以,从某种意义上来说,只要你保证你的接口中只 有一个抽象方法,你可以不加这个注解。加上就会自动进行检测的。

2.函数式接口的使用

//无返回值无参数
@FunctionalInterface
interface NoParameterNoReturn {//一般最主要使用void test();default void test2() {System.out.println("JDK1.8新特性,default默认方法可以有具体的实现");}static void test3() {System.out.println("静态方法也可以");}
}public class TestLambda {public static void main(String[] args) {//用接口接收一个匿名内部类NoParameterNoReturn noParameterNoReturn = new NoParameterNoReturn() {@Overridepublic void test() {System.out.println("无参的方法");}@Overridepublic void test2() {System.out.println("默认的方法重写了");}};//平时最常用的方式noParameterNoReturn.test();//默认方法也可以用匿名内部类重写noParameterNoReturn.test2();//通过类名调用NoParameterNoReturn.test3();}
}

 执行结果:

2.1 函数式接口的补充介绍

函数式接口中可以有以下几种方法,即便是被@FunctionalInterface修饰:

  1. 抽象方法
  2. 继承的方法
  3. 默认的方法
  4. 静态的方法
  5. 私有的方法
@FunctionalInterface
interface MyFunctionalInterface {//抽象方法void myAbstractMethod();//继承的方法,继承自Objectboolean equals(Object obj);default void defaultMethod() {System.out.println("这是默认方法");}static void staticMethod() {System.out.println("这是静态方法");}//虽然可以有,但是不能访问private void helperMethod() {System.out.println("这是私有方法");}}
class Test3 implements MyFunctionalInterface {@Overridepublic boolean equals(Object obj) {return super.equals(obj);}@Overridepublic void myAbstractMethod() {System.out.println("这是抽象方法");}
}public class TestLambda {public static void main(String[] args) {//重写抽象方法,并调用MyFunctionalInterface myFunctionalInterface = () -> System.out.println("这是抽象方法");myFunctionalInterface.myAbstractMethod();//调用默认方法myFunctionalInterface.defaultMethod();//用类名调用,静态方法MyFunctionalInterface.staticMethod();//需要创建类来实现,继承的方法Test3 test3 = new Test3();
//        test3.equals(……)}
}

二、Lambda的基本介绍

Lambda 表达式是 Java SE 8 中一个重要的新特性。L ambda 表达式允许你通过表达式来代替功能接口。  Lambda 表达式就和方法一样, 它提供了一个正常的参数列表和一个使用这些参数的主体 (body, 可以是一个表达式或一个代码块) Lambda 表达式( Lambda expression ,基于数学中的 λ 演算得名,也可称为闭包( Closure ) 。
1. Lambda 表达式的语法
基本语法 : (parameters) -> expression (parameters) ->{ statements; }
Lambda表达式由三部分组成:
1. paramaters 类似方法中的形参列表,这里的参数是函数式接口里的参数。 这里的参数类型可以明确的声明也可不声明而由JVM隐含的推断 。另外当只有 一个推断类型时可以省略掉圆括号。
2. -> :可理解为 被用于 的意思
3. 方法体 :可以是表达式也可以代码块,是函数式接口里方法的实现。代码块可返回一个值或者什么都不反回,这里的代码块块等同于方法的方法体。如果是表达式,也可以返回一个值或者什么都不反回。 如果只有返回什么一条语句,可以不写{} 和 return,他们只能一起不写。

// 1. 不需要参数,返回值为 2
() -> 2
// 2. 接收一个参数(数字类型),返回其2倍的值
x -> 2 * x
// 3. 接受2个参数(数字),并返回他们的和
(x, y) -> x + y
// 4. 接收2个int型整数,返回他们的乘积
(int x, int y) -> x * y
// 5. 接受一个 string 对象,并在控制台打印,不返回任何值(看起来像是返回void)
(String s) -> System.out.print(s)

三、Lambda的使用

1.无返回值情况

1.1 无参数

//无返回值无参数
@FunctionalInterface
interface NoParameterNoReturn {void test();
}public class TestLambda {public static void main(String[] args) {//用接口接收一个匿名内部类NoParameterNoReturn noParameterNoReturn = new NoParameterNoReturn() {@Overridepublic void test() {System.out.println("无参的方法");}};noParameterNoReturn.test();System.out.println("===下面用Lambda实现===");NoParameterNoReturn noParameterNoReturn1 = () -> System.out.println("无参的方法");//或者//NoParameterNoReturn noParameterNoReturn1 = () -> {System.out.println("无参的方法");};noParameterNoReturn1.test();}
}

 结果:

而且发现就连 new 接口类型 都被省略了,所以Lambda表达式其实非常抽象,而且使用Lambda的前提是要熟悉你用的函数式接口。

 1.2 一个参数

//无返回值一个参数
@FunctionalInterface
interface OneParameterNoReturn {void test(int a);
}public class TestLambda {public static void main(String[] args) {OneParameterNoReturn oneParameterNoReturn = new OneParameterNoReturn() {@Overridepublic void test(int a) {System.out.println(a);}};//调用oneParameterNoReturn.test(10);System.out.println("===下面用Lambda实现===");//                                         此时的参数名,可以随便取OneParameterNoReturn oneParameterNoReturn1 = k -> System.out.println(k);//或者
//        OneParameterNoReturn oneParameterNoReturn1 = (k) -> {System.out.println(k);};oneParameterNoReturn1.test(20);}
}

结果:

1.3 多参数情况

//无返回值多个参数
@FunctionalInterface
interface MoreParameterNoReturn {void test(int a,int b);
}public class TestLambda {public static void main(String[] args) {MoreParameterNoReturn moreParameterNoReturn = new MoreParameterNoReturn() {@Overridepublic void test(int a, int b) {System.out.println(a+b);}};moreParameterNoReturn.test(10,20);System.out.println("===下面用Lambda实现===");MoreParameterNoReturn moreParameterNoReturn1 = (a,b) -> System.out.println(a+b);//当参数是多个,那么()就不能省略了
//          MoreParameterNoReturn moreParameterNoReturn1 = a,b -> System.out.println(a+b);moreParameterNoReturn1.test(20, 30);}
}

结果:

2. 有返回值情况

//有返回值无参数
@FunctionalInterface
interface NoParameterReturn {int test();
}public class TestLambda {public static void main(String[] args) {NoParameterReturn noParameterReturn = new NoParameterReturn() {@Overridepublic int test() {return 200;}};System.out.println(noParameterReturn.test());System.out.println("===下面用Lambda实现===");NoParameterReturn noParameterReturn1 = () -> 500;//或者
//        NoParameterReturn noParameterReturn1 = () -> {return 500;};System.out.println(noParameterReturn1.test());}
}

结果:

2.1 无参数

//有返回值无参数
@FunctionalInterface
interface NoParameterReturn {int test();
}
public class TestLambda {public static void main(String[] args) {NoParameterReturn noParameterReturn = new NoParameterReturn() {@Overridepublic int test() {return 200;}};System.out.println(noParameterReturn.test());System.out.println("===下面用Lambda实现===");//        NoParameterReturn noParameterReturn1 = () -> 500;//      或者NoParameterReturn noParameterReturn1 = () -> {// 如果不只一条语句,就必须加上{}和returnSystem.out.println(500);return 500;};System.out.println(noParameterReturn1.test());}
}

2.2 一个参数

//有返回值一个参数
@FunctionalInterface
interface OneParameterReturn {int test(int a);
}
public class TestLambda {public static void main(String[] args) {OneParameterReturn oneParameterReturn = new OneParameterReturn() {@Overridepublic int test(int a) {return a;}};System.out.println(oneParameterReturn.test(100));System.out.println("===下面用Lambda实现===");OneParameterReturn oneParameterReturn1 = a -> {return a;};//或者
//        OneParameterReturn oneParameterReturn1 = a -> a;System.out.println(oneParameterReturn1.test(200));}
}

结果:

2.3 多参数

//有返回值多参数
@FunctionalInterface
interface MoreParameterReturn {int test(int a,int b);
}
public class TestLambda {public static void main(String[] args) {MoreParameterReturn moreParameterReturn = new MoreParameterReturn() {@Overridepublic int test(int a, int b) {return a + b;}};System.out.println(moreParameterReturn.test(10, 20));System.out.println("===下面用Lambda实现===");MoreParameterReturn moreParameterReturn1 = (a,b) -> {return a+b;};//或者
//        MoreParameterReturn moreParameterReturn1 = (a,b) -> a + b;System.out.println(moreParameterReturn1.test(20, 30));}
}

结果:

四、总结语法精简

1. 参数类型可以省略,如果需要省略,每个参数的类型都要省略。
2. 参数的小括号里面只有一个参数,那么小括号可以省略
3. 如果方法体当中只有一句代码,那么大括号可以省略
4. 如果方法体中只有一条语句,且是 return 语句,那么大括号可以省略,且去掉 return 关键字。

 五、变量捕获

匿名内部类:

 Lambda:那么Lambda表达式也是同样的

 这种时候我们最后就加上final保护一下

/有返回值无参数
@FunctionalInterface
interface NoParameterReturn {int test();
}
public class TestLambda {public static void main(String[] args) {//加上final保护一下final int a = 0;
//        a = 99; errNoParameterReturn noParameterReturn = () -> {
//            a = 100; errreturn a;};System.out.println(noParameterReturn.test());}
}

 

 

 六、Lambda在集合中的使用

为了能够让 Lambda Java 的集合类集更好的一起使用,集合当中,也新增了部分接口,以便与 Lambda 表达式对接。

1. 用Lambda写改为大根堆

PriorityQueue做为堆,我们知道他默认是小根堆,如果需要大根堆需要给比较器,现在有了

Lambda就可以很简便:

class Test implements Comparator<Integer> {public int compare(Integer o1, Integer o2) {return o2 - o1;}
}public class TestLambda {public static void main(String[] args) {//方式一:PriorityQueue<Integer> priorityQueue = new PriorityQueue<>(new Test());priorityQueue.offer(1);priorityQueue.offer(2);priorityQueue.offer(3);priorityQueue.offer(4);priorityQueue.offer(5);System.out.println(priorityQueue);//方式二:PriorityQueue<Integer> priorityQueue1 = new PriorityQueue<>(new Comparator<Integer>() {@Overridepublic int compare(Integer o1, Integer o2) {return o2 - o1;}});//方式三:PriorityQueue<Integer> priorityQueue2 = new PriorityQueue<>((o1, o2) -> o2 - o1);}

2. 用Lambda遍历hash表

public static void main(String[] args) {HashMap<Integer,String> hashMap = new HashMap<>();hashMap.put(1,"hallo");hashMap.put(2,"word");hashMap.put(3,"and");hashMap.put(4,"Lambda");hashMap.forEach(new BiConsumer<Integer, String>() {@Overridepublic void accept(Integer key, String value) {System.out.println("key: " + key + "  value: " + value);}});System.out.println("===以下是Lambda实现===");hashMap.forEach( (key,value) -> System.out.println("key: " + key + "  value: " + value) );}

结果:

等等就不一 一举例了

http://www.dtcms.com/wzjs/546414.html

相关文章:

  • 青岛网站排名外包做设计那些网站可以卖设计
  • 天津高端模板建站南谯区住房和城乡建设局网站
  • 怎么做网站流量wordpress 文章分页插件
  • 郑州网站建设公司前景怎么在网站做外部链接
  • 预约网站怎么做桂林旅游必去十大景点
  • 上传网站程序是什么营销型网站建设市场分析
  • 沈阳企业网站开发网站建设如何快速增加用户
  • ssh jsp做网站可以做链接的网站
  • 南京 推广 网站建设沈阳第一建筑公司
  • 电力建设期刊 网站无法访问微信朋友圈推广平台收费标准
  • 苏州吴中区做网站价格河南国基建设集团--官方网站
  • 惠阳惠州网站建设百度搜索什么关键词排名
  • 网站开发常用模板自助建站系统模板
  • 网站建设预算申请表网站vps
  • 网站建设管理中se是什么意思马鞍山网站建设电话
  • 文登区城乡建设局网站四平市建设局网站
  • 服装公司网站模板网页布局的设计步骤
  • 网站1g的空间能用多久爱站工具包下载
  • 南京网站建设多少钱设计网站vcg
  • wordpress快速仿站视频教程网站使用mip后效果怎么样
  • 网站扫码怎么做的软件公司组织架构
  • 宝安网站制作网站建设网站制作公司 沧州
  • 免费seo网站自动推广在线平面设计招聘
  • 建设一个视频网站首页wordpress 移动端主题
  • 电子商务网站开发计划书网站建设职能
  • 网站建设价格兴田德润i网址多少建设工程包括什么工程
  • 如何做企业网站电商怎么推广自己的产品
  • 网站优化设计的基础是网站基本要素及每个细节的优化wordpress cat
  • 做网站需要哪些条件南京汽车集团网站建设
  • 2017学脚本语言做网站网站开发维护工作