java8 新特性 Lamda表达式

**

1.函数式编程思想概述

**
  在数学中,函数就是有输入量、输出量的一套计算方案(例如y=x2+10),也就是“拿什么东西做什么事情”。相对而言,面向对象过分强调“必须通过对象的形式来做事情”,而函数式思想则尽量忽略面向对象的复杂语法——强调做什么,而不是以什么形式做。

简单来说,面向对象的思想来做一件事情话,首先找一个能解决这个事情的对象,再去调用对象的方法来完成事情。而函数式编程思想是只要能获取到结果,谁去做的或者怎么做的都不重要,重视的是结果,不重视过程。

2014年3月Oracle所发布的Java 8(JDK 1.8)中,加入了Lambda表达式的重量级新特性。

使用Lamda表达式之前:

 Integer[] ints = new Integer[]{1,2,4,3,5,8,6,7,9};
		 
       	  Arrays.sort(ints,new Comparator<Integer>() {
       		@Override
            public int compare(Integer o1, Integer o2) {
                return o2-o1;
            }
		});
		 System.out.println();
         System.out.print(Arrays.toString(ints));

对于Comparator的匿名内部类用法,可以分析出几点内容:
  (1)数组排序sort方法需要 Comparator接口作为参数,其中的抽象 compare 方法是用来指定排序方式。
  (2)为了指定 compare 的方法体,不得不需要 Comparator 接口的实现类。
  (3)为了省去定义一个 Comparator的 实现类的麻烦,不得不使用匿名内部类。
  (4)必须覆盖重写抽象 compare 方法,所以方法名称、方法参数、方法返回值不得不再写一遍,且不能写错。
  (5)实际上,似乎只有方法体才是关键所在,而其他代码都是重复的。

使用Lamda表达式之后 :

 Integer[] ints = new Integer[]{1,2,4,3,5,8,6,7,9};
   Arrays.sort(ints,(x,y)->{return y-x;});
      	 System.out.println();
         System.out.print(Arrays.toString(ints));

**

2.1 Lamda表达式标准格式

**
   Lambda省去面向对象的条条框框,格式由3个部分组成:一些参数、一个箭头和一段代码。
Lambda表达式的标准格式为:

(参数类型 参数名称) ‐> { 代码语句 }

1.小括号内的语法与传统方法参数列表一致:无参数则留空;多个参数则用逗号分隔。
2.->是新引入的语法格式,代表指向动作。
3.大括号内的语法与传统方法体要求基本一致。

**

2.2Lamda表达式省略格式

**
可推导即可省略
  Lambda强调的是“做什么”而不是“怎么做”,所以凡是可以根据上下文推导得知的信息,都可以省略
省略规则
  (1)小括号内参数的类型可以省略。
  (2)如果小括号内有且仅有一个参,则小括号可以省略。
  (3)如果大括号内有且仅有一个语句,则无论是否有返回值,都可以省略大括号、return关键字及语句分号。

**

2.3使用前提:

**
Lambda的语法非常简洁,完全没有面向对象复杂的束缚。但是使用时有几个问题需要特别注意:
  (1)使用Lambda必须具有接口,且要求接口中有且仅有一个抽象方法。无论是JDK内置的 Runnable 、 Comparator 接口还是自定义的接口,只有当接口中的抽象方法存在且唯一时,才可以使用Lambda。
  (2)使用Lambda必须具有上下文推断。也就是方法的参数或局部变量类型必须为Lambda对应的接口类型,才能使用Lambda作为该接口的实例。

备注:有且仅有一个抽象方法的接口,称为“函数式接口”。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值