Lambda表达式
-
“λ”是希腊字母的第11个,英文名叫lambda。
-
lambda可以用来简化线程,它是JDK8的新特性。
一、lambda是对线程的简化,那么我们先来看看,在没有lambda之前,要如何简化线程,进而一步步的推导出lambda表达式
1.直接实现类调用
package com.xxgc.lambda;
//直接实现类调用
public class TestLambda2 {
public static void main(String[] args) {
ILove love = new Love();
love.Love(2);
}
}
interface ILove{
void Love(int a);
}
//实现类
class Love implements ILove{
@Override
public void Love(int a) {
System.out.println("I love You-->"+a);
}
}
2.静态内部类
package com.xxgc.lambda;
//直接实现类调用
public class TestLambda2 {
//静态内部类
static class Love implements ILove{
@Override
public void Love(int a) {
System.out.println("I love You-->"+a);
}
}
public static void main(String[] args) {
ILove love = new Love();
love.Love(2);
}
}
interface ILove{
void Love(int a);
}
3.局部内部类
package com.xxgc.lambda;
//直接实现类调用
public class TestLambda2 {
public static void main(String[] args) {
//局部内部类
class Love implements ILove{
@Override
public void Love(int a) {
System.out.println("I love You-->"+a);
}
}
ILove love = new Love();
love.Love(2);
}
}
interface ILove{
void Love(int a);
}
4.匿名内部类
package com.xxgc.lambda;
//直接实现类调用
public class TestLambda2 {
public static void main(String[] args) {
//匿名内部类
ILove love = new ILove() {
@Override
public void Love(int a) {
System.out.println("I love You-->"+a);
}
};
love.Love(2);
}
}
interface ILove{
void Love(int a);
}
5.lambda表达式
package com.xxgc.lambda;
//直接实现类调用
public class TestLambda2 {
public static void main(String[] args) {
//lambda表达式
ILove love = (int a) ->{
System.out.println("I love You-->"+a);
};
love.Love(520);
}
}
interface ILove{
void Love(int a);
}
6.再次简化lambda表达式,去掉参数类型
package com.xxgc.lambda;
//直接实现类调用
public class TestLambda2 {
public static void main(String[] args) {
//lambda表达式
ILove love = (int a) ->{
System.out.println("I love You-->"+a);
};
//简化1:去掉参数类型
love = (a) -> {
System.out.println("I love You-->"+a);
};
love.Love(520);
}
}
interface ILove{
void Love(int a);
}
7.再次简化,去掉括号
package com.xxgc.lambda;
//直接实现类调用
public class TestLambda2 {
public static void main(String[] args) {
//lambda表达式
ILove love = (int a) ->{
System.out.println("I love You-->"+a);
};
//简化1:去掉参数类型
love = (a) -> {
System.out.println("I love You-->"+a);
};
//简化2:去掉括号简化
love = a -> {
System.out.println("I love You-->"+a);
};
love.Love(520);
}
}
interface ILove{
void Love(int a);
}
8.简化3:去掉花括号
package com.xxgc.lambda;
//直接实现类调用
public class TestLambda2 {
public static void main(String[] args) {
// ILove love = null;
//lambda表达式
ILove love = (int a) ->{
System.out.println("I love You-->"+a);
};
//简化1:去掉参数类型
love = (a) -> {
System.out.println("I love You-->"+a);
};
//简化2:去掉括号简化
love = a -> {
System.out.println("I love You-->"+a);
};
//简化3:去掉花括号
love = a -> System.out.println("I love You-->"+a);
love.Love(521);
}
}
interface ILove{
void Love(int a);
}
总结:
-
lambda表达式只能有一行代码的情况下才能简化为一行,如果有多行,那么就用代码块包裹
-
前提还要是接口为函数式接口,即只有一个方法
-
多个参数也可以去掉参数类型,要去掉就都要去掉,必须加上括号。
package com.xxgc.lambda;
//直接实现类调用
public class TestLambda2 {
public static void main(String[] args) {
// ILove love = null;
//lambda表达式
ILove love = (int a,int b) ->{
System.out.println("I love You-->"+a);
};
//简化1:去掉参数类型
love = (a,b) -> {
System.out.println("I love You-->"+a);
System.out.println("I love You-->too");
};
//简化2:去掉括号简化
//错误了
/* love = a,b -> {
System.out.println("I love You-->"+a);
};*/
//简化3:去掉花括号
//love = (a,b) -> System.out.println("I love You-->"+a);
love.Love(521,502);
}
}
interface ILove{
void Love(int a,int b);
}
//总结:
//lambda表达式只能有一行代码的情况下才能简化为一行,如果有多行,那么就用代码块包裹
//前提还要是接口为函数式接口,即只有一个方法
//多个参数也可以去掉参数类型,要去掉就都要去掉,必须加上括号。