Lambda表达式:
避免匿名内部类定义过多
可以使代码看起来很简介
去掉了一推没有意义的代码,只留下核心的逻辑
其实质属于函数式编程概念
new Thread(()->System.out.println("多线程的学习......")).start();
函数式接口的定义:
任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口
对于函数式接口,我们可以通过lambda表达式来创建该接口的对象
Lambda表达式的推演:
没有参数:
package com.wzz.A03多线程.TestThread8;
/*
*推导Lambda表达式
*/
public class TestLambda {
//3.静态内部类
static class Like2 implements ILike{
@Override
public void lambda() {
System.out.println("i like lambda2");
}
}
public static void main(String[] args) {
ILike iLike = new Like();
iLike.lambda();
ILike iLike2 = new Like2();
iLike2.lambda();
//4.局部内部类
class Like3 implements ILike{
@Override
public void lambda() {
System.out.println("i like lambda3");
}
}
ILike iLike3 = new Like3();
iLike3.lambda();
//5.匿名内部类
ILike iLike4 = new ILike() {
@Override
public void lambda() {
System.out.println("i like lambda4");
}
};
iLike4.lambda();
//6.lambda简化
ILike iLike5 = () ->{
System.out.println("i like lambda5");
};
iLike5.lambda();
}
}
//1.定义一个函数式接口
interface ILike{
void lambda();
}
//2.实现外部类
class Like implements ILike{
@Override
public void lambda() {
System.out.println("i like lambda");
}
}
有参数:
package com.wzz.A03多线程.TestThread8;
/*
*推导Lambda表达式
*/
public class TestLambda2 {
//3.静态内部类
static class Love2 implements ILove{
@Override
public void love(int a,int b) {
System.out.println(a+"love"+b);
}
}
public static void main(String[] args) {
ILove iLove = new Love();
iLove.love(1,1);
ILove iLove2 = new Love2();
iLove2.love(2,2);
//4.局部内部类
class Love3 implements ILove{
@Override
public void love(int a,int b) {
System.out.println(a+"love"+b);
}
}
ILove iLove3 = new Love3();
iLove3.love(3,3);
//5.匿名内部类
ILove iLove4 = new ILove() {
@Override
public void love(int a,int b) {
System.out.println(a+"love"+b);
}
};
iLove4.love(4,4);
//6.lambda简化
ILove iLove5 = (int a,int b) ->{
System.out.println(a+"love"+b);
};
iLove5.love(5,5);
//6.简化1.参数类型: 参数类型必需同时去掉
ILove iLove6 = (a,b) ->{
System.out.println(a+"love"+b);
};
iLove6.love(6,6);
//6.简化2.去掉括号:不能去掉括号是因为参数有多个
ILove iLove7 = (a,b) ->{
System.out.println(a+"love"+b);
};
iLove7.love(7,7);
//6.简化2.去掉花括号:能去掉是因为花括号中代码只有一行
ILove iLove8 = (a,b) ->System.out.println(a+"love"+b);
iLove8.love(8,8);
}
}
//1.定义一个函数式接口
interface ILove{
void love(int a,int b);
}
//2.实现外部类
class Love implements ILove{
@Override
public void love(int a,int b) {
System.out.println(a+"love"+b);
}
}