/**
* @author zbinyds
* @time 2022/10/18 13:59
*
* lambda表达式语法介绍
* 例子:(o1,o2) -> {Integer.compareTo(o1,o2);};
* 格式:
* 1、 -> 左边:表示方法参数列表
* 2、 -> 右边:表示方法中的方法体
*
* 总结:
* 1、Lambda表达式的本质:实际上就是函数式接口的实现类对象。
* 2、匿名实现类表示的都可以用Lambda表达式进行简写。
*
* 什么是函数式接口? -> 接口内中只定义了一个一个抽象方法。
* Java中内置的四大核心函数式接口与他们的抽象方法。
* 1、消费型接口 Consume<T> void accept(T t);
* 2、供给型接口 Supplier<T> T get();
* 3、函数型接口 Function<T,R> R apply(T t);
* 4、断定型接口 Predicate<T> boolean test(T t);
*
*/
public class Lambda_ {
/**
* 情况一:无参无返回值
*/
@Test
public void test1() {
// 未使用Lambda表达式的写法
Runnable r1 = new Runnable() {
@Override
public void run() {
System.out.println("r1中的run()执行了...");
}
};
r1.run();
System.out.println("**************使用Lambda表达式**************");
// 如果方法体中只有一条语句,那么此时大括号可以省略
// Runnable r2 = () -> {System.out.println("r2中的run()执行了...");};
Runnable r2 = () -> System.out.println("r2中的run()执行了...");
r2.run();
}
/**
* 情况二:有参无返回值
*/
@Test
public void test2() {
// 未使用Lambda表达式的写法
Consumer<String> con1 = new Consumer<String>() {
@Override
public void accept(String s) {
System.out.println(s);
}
};
con1.accept("谎言和誓言的区别是什么?");
System.out.println("**************使用Lambda表达式**************");
// 如果参数只有一个,那么此时小括号可以省略
// Consumer<String> con2 = (s) -> System.out.println(s);
// Consumer<String> con2 = s -> System.out.println(s);
Consumer<String> con2 = System.out::println;
con2.accept("一个是听的人当真了,一个是说的人当真了");
}
/**
* 情况三:有参有返回值
*/
@Test
public void test3() {
// 未使用Lambda表达式的写法
Comparator<Integer> com1 = new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o1.compareTo(o2);
}
};
System.out.println("com1 ==> " + com1.compare(13, 2));
System.out.println("**************使用Lambda表达式**************");
// Comparator<Integer> com2 = (o1,o2) -> o1.compareTo(o2);
Comparator<Integer> com2 = Integer::compareTo;
System.out.println("com2 ==> " + com2.compare(12, 22));
}
/**
* 无参有返回值
*/
@Test
public void test4() {
T t1 = new T() {
@Override
public Integer test() {
return 1;
}
};
System.out.println(t1.test());
System.out.println("**************使用Lambda表达式**************");
T t2 = () -> null;
System.out.println(t2.test());
}
}
// 测试使用。自定义函数式接口
@FunctionalInterface
interface T {
Integer test();
}