import java.util.Comparator;
import java.util.TreeSet;
import org.junit.Test;
/*
*
- 此类用于演示Lambda表达式的理解和好处和应用场景
- 一、理解
- Lambda表达式可以理解为一段可以传递的代码,像数据一样传递给方法或构造器的参数
- 实际上,Lambda表达式是匿名内部类的一种简化或代替
- 能用Lambda表达式的地方,肯定能用匿名内部类!
- 但能用匿名内部类的地方,不一定能用Lambda表达式,除非满足以下条件:
-
该接口或抽象类中只有一个抽象方法
- 二、好处
- 代码简化、更加灵活、紧凑!
- 三、应用场景
- 同匿名内部类
- 1、当做实参传递给构造器或方法 ★
- method(Lambda表达式);
- public void method(LiSh ls){
- ls.s();
- }
- 2、直接赋值给接口,当做对象
*LiSh ls = Lambda表达式;
*
*
- 四、语法:
- (参数类型 参数名,参数类型 参数名)-> {Lambda体}
- 语法注意事项:
- 1、左侧的参数类型可以省略
- 2、当左侧只有一个参数,则小括号也可以省略
- 3、当右侧Lambda体只有一句话,则大括号可以省略
- 4、当右侧Lambda体只有一句return,则return可以省略
*/
public class TestLambda1 {
//测试语法1:完整语法
@Test
public void test1() {
//使用匿名内部类
TreeSet set = new TreeSet<>(new Comparator() {
@Override
public int compare(String o1, String o2) {
System.out.println("好好学习");
return o1.compareTo(o2);
}}) ;
//使用Lambdda表达式
TreeSet<String> set2 = new TreeSet<>((String o1, String o2)->{
System.out.println("好好学习");
return o1.compareTo(o2);}) ;
}
//测试语法2:简化语法 :参数类型可以省略
@Test
public void test2() {
//使用匿名内部类
TreeSet<String> set = new TreeSet<>(new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
System.out.println("好好学习");
return o1.compareTo(o2);
}}) ;
//使用Lambdda表达式
TreeSet<String> set2 = new TreeSet<>(( o1, o2)->{
System.out.println("好好学习");
return o1.compareTo(o2);}) ;
}
//测试语法2:简化语法 :当只有一个参数,则小括号可以省略
@Test
public void test3() {
//使用匿名内部类
Comparable<Integer> com = new Comparable<Integer>() {
@Override
public int compareTo(Integer o) {
return 0;
}
};
//使用Lambda表达式
Comparable<Integer> com2 = o->{return 0;};
}
//测试语法3:简化语法 :当右侧只有一句话,则大括号可以省略,而且如果仅有的一句话为reurn语句,则return可以省略
@Test
public void test4() {
//使用匿名内部类
Comparable<Integer> com = new Comparable<Integer>() {
@Override
public int compareTo(Integer o) {
return 0;
}
};
//使用Lambda表达式
Comparable<Integer> com2 = o-> 0;
}
//测试语法5:简化语法
@Test
public void test5() {
// //使用匿名内部类
// Runnable run1 = new Runnable() {
// @Override
// public void run() {
// System.out.println(“跑”);
//
// }
// };
//
//使用Lambda表达式
Runnable run2 = ()->System.out.println("跑");
run2.run();
}
@Test
public void test() {
// Thread t = new Thread(new Runnable() {
//
// @Override
// public void run() {
// System.out.println(“我要跑啊跑,哈哈哈”);
//
// }
//
//
// });
// t.start();
//使用Lambda
Thread t = new Thread(()->System.out.println("我要跑啊跑,哈哈哈"));
t.start();
}
}