欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

达内javaSE_day08 学习笔记 —— lambda表达式

程序员文章站 2022-05-25 21:29:32
...

javaSE_day08

lambda表达式

  • 函数式接口编程
    接口中只有一个抽象方法,把方法通过匿名类实现的方式简化成一个表达式(lambda表达式)的写法。

  • 语法格式
    () -> {}
    () 表示形参列表
    -> 符号 goes to
    {} 表示方法体
    达内javaSE_day08 学习笔记 —— lambda表达式
    达内javaSE_day08 学习笔记 —— lambda表达式

  • 如果只有一条语句,{ }可省略
    eg:
    /* IA a2 = ()-> {
    System.out.println(“hello!!!”);
    };*/
    IA a2 = ()-> System.out.println(“hello!!!”);

  • 参数列表的数据类型可省略
    eg:
    /* IA2 a2 = (int x,int y)->{ //lambda表达式
    System.out.println(x+y);
    };*/
    IA2 a2 = ( x, y)-> System.out.println(x+y);

  • 如果参数列表是一个参数,()可以省略
    //IA2 a2 = x-> System.out.println(x+y);

  • 如果方法体中只有一条语句,return可以省略
    eg:
    /* IA3 a = (int x,int y)->{ //lambda表达式
    return x+y;
    };*/
    IA3 a = (x,y)->x+y;

练习:

  1. 给定一个厨师接口Cook,内含唯一的抽象方法makeFood,且无参数, 无返回值。
    使用Lambda的标准格式调用invokeCook方法,打印"吃饭啦!"
package cn.tedu.lambda;

interface Cook{
	//输出 吃饭啦
	void makeFood();
}
public class TestLambda {
	public static void invokeCook(Cook cook) {
		cook.makeFood();
	}

	public static void main(String[] args) {
		
		invokeCook(new Cook() { //匿名类			
			@Override
			public void makeFood() {
				System.out.println("吃饭啦!");
				
			}
		});

		invokeCook(()->System.out.println("吃饭啦!!")); //lambda表达式
		
	}
}

2.定义接口
public interface Calculator {
//定义一个计算两个int整数和的方法并返回结果
int calc(int a,int b);
定义测试类
public class Demo01Calculator {
public static void main(String[] args) {
//调用invokeCalc方法,方法的参数使用匿名内部类
实现
//使用Lambda表达式简化匿名内部类的书写
}
public static void invokeCalc(int a,int b,Calculator c){
int sum = c.calc(a,b);
System.out.println(sum);
}
}

package cn.tedu.lambda;

interface Calculator{
	int calc(int a,int b);
}
public class TestCalculator {

	public static void invokeCalc(int a,int b,Calculator c) {
		int sum = c.calc(a, b);
		System.out.println(sum);
	}
	public static void main(String[] args) {
		invokeCalc(1, 2, new Calculator() {  //匿名内部类实现接口
			
			@Override
			public int calc(int a, int b) {
				return a+b;
			}
		});
		
		invokeCalc(2, 3,(a,b)->a+b);  //lambda表达式

	}

}

lambda表达式使用已定义方法

方法的参数相同,返回类型相同时才可用这种格式:
方法的归属者 : : 方法名

  • 非静态:方法的归属者就是对象名;
  • 静态:方法的归属者是类名
    达内javaSE_day08 学习笔记 —— lambda表达式
    练习:
package cn.tedu.lambda;
/**
 * 练习
 * @author Dell
 *
 */
interface IDemo{
	//控制输出
	void showMessage(String msg);
}
interface IDemo2{
	//返回两个数的最大值:Math.max()
	int max(int x,int y);
}
public class Demo5 {

	/*public void showMessage(String msg) {
		System.out.println(msg);
	}
	public static int max(int x,int y) {
		return Math.max(x, y);
	}*/
	public static void main(String[] args) {
		Demo5 demo = new Demo5();
		
		/*IDemo demo1 = demo:: showMessage;
		demo1.showMessage("123");
		
		IDemo2 demo2 = Demo5::max;
		System.out.println(demo2.max(1, 2));*/
		
		IDemo demo1 = System.out:: println;
		demo1.showMessage("123");
		
		IDemo2 demo2 = Math::max;
		System.out.println(demo2.max(1, 2));
	}

}

Lambda对构造方法的引用

达内javaSE_day08 学习笔记 —— lambda表达式

相关标签: javaSE实训笔记