只含有一个抽象方法的接口
public interface FunctionalInterface{
void run();
}
1 无参数
public class LambdaExpNoArgs {
// 静态内部类
static class Like2 implements ILike{
@Override
public void lambda() {
System.out.println("i like lambda2.");
}
}
public static void main(String[] args) {
// 1 原始实现
ILike like = new Like();
like.lambda();
// 2 静态内部类实现
like = new Like2();
like.lambda();
// 3 局部内部类实现
class Like3 implements ILike{
@Override
public void lambda() {
System.out.println("i like lambda3.");
}
}
like = new Like3();
like.lambda();
// 4 匿名内部类,没有类的名字,需借助接口或父类实现
like = new ILike() {
@Override
public void lambda() {
System.out.println("i like lambda4.");
}
};
like.lambda();
// 5 Lambda简化
like = () -> {
System.out.println("i like lambda5.");
};
like.lambda();
}
}
// 函数式接口
interface ILike{
void lambda();
}
// 接口的一个实现类
class Like implements ILike{
@Override
public void lambda() {
System.out.println("i like lambda1.");
}
}
效果
2 有参数
package com.zj;
public class LambdaExpWithArgs {
public static void main(String[] args) {
// lambda标准写法
ILove love = (int a, int b) -> {
System.out.println("i love lambda --> "+a);
};
// 简化1 参数类型
love = (a,b) -> {
System.out.println("i love lambda --> "+a);
System.out.println("i love lambda too --> "+b);
};
/*
// 简化2 简化括号
love = a -> {
System.out.println("i love lambda --> "+a);
};
// 简化3 花括号
love = a -> System.out.println("i love lambda --> "+a);
*/
/*
总结:
lambda表达式只能有一行代码的情况下才能简化为一行,如果有多行,就需要用代码块包裹
前提是函数式接口
多个参数也可以去掉参数类型,要去掉就都去掉,必须加上括号
*/
love.love(2,3);
}
}
interface ILove{
void love(int a,int b);
}
效果
原文:https://www.cnblogs.com/pipacam/p/14777127.html