lambda表达式学习一

学习总结自《java核心技术卷一》

一.什么是lambda表达式?
lambda表达式是一个可传递的代码块,可以在以后执行一次或多次。

二.为什么要引入lambda表达式?
在引入lambda表达式之前,我们如果想用某一个方法,但这个方法在一个类里,所以我们不得不为了用那一个方法而实例化那个类,这不免让我们感觉有点大材小用。
在有些其他语言中可以直接处理代码块,因为这个特性其他语言在某些方面比java更优秀。
所以java需要一个功能来实现代码块的传递而不需要新建一个实例的方法,于是lambda表达式被引入java中了。

三.lambda表达式的语法
我们先来看下一个基本的lambda表达式:

(String first,String second)
->first.length()-second.length()

从上面看我们可以了解到lambda表达式就是一个代码块,以及必须传入代码的变量规范。

1.从上面的例子我们可以基本总结出lambda表达式的表现形式:
参数->以及一个表达式

不同的表达式可能会有不同的表现形式:
1)如果代码要完成的计算量无法放在一个表达式中,我们就可以像写方法一样把代码放在花括号里

(String first,String second)->
{
 if(first.length()<second.length()) return -1;
 else if(first.length()>second.length()) return 1;
 else return 0;
}

2)即使lambda表达式没有参数,前面仍要提供小括号:

()->{for(int i=100;i>=0;i++) System.out.println(i);}

3)如果可以推导出一个lambda表达式的参数类型,我们可以忽略其类型。

Comparator<String>comp=(first,second)
->first.length()-second.length();

4)如果方法只有一个参数,而且这个参数的类型可以推导出,我们甚至可以省略小括号。

ActionListener listener=event->
System.out.println("Hello");

5)我们无需指定lambda表达式的返回类型。因为lambda表达式的返回类型总是会由上下文推导得出。

(String first,String second)
->first.length()-second.length()

6)如果一个lambda表达式只在某些分支返回一个值,而在另外一些分支不返回值,这是不合法的。

(int x)->{
  if(x>=0) return 1;
}

上面的表述没有在x<0时返回值,不严谨,所以是不合法的。

猜你喜欢

转载自blog.csdn.net/c1776167012/article/details/106319442
今日推荐