Lambda表达式
- 1 package com.yhqtv.java1;
- 2
- 3 import org.junit.Test;
- 4
- 5 import java.util.ArrayList;
- 6 import java.util.Comparator;
- 7 import java.util.function.Consumer;
- 8
- 9 /*
- 10 * @author XMKJ yhqtv.com Email:yhqtv@qq.com
- 11 * @create 2020-05-11-14:28
- 12 *
- 13 * 总结六种情况:
- 14 ->左边:lambda形参列表的参数类型可以省略(类型推断);如果lambda形参列表只一个参数,其一对()也可以省略
- 15 ->右边:lambda体应该使用一对{}包裹;如果lambda体只一条执行语句(可能是return语句,省略这一对{}和return关键字
- 16 *
- 17 *
- 18 *
- 19 */
- 20 public class LambdaTest1 {
- 21 //语法格式一:无参、无返回值
- 22 @Test
- 23 public void test1() {
- 24 Runnable r1 = new Runnable() {
- 25 @Override
- 26 public void run() {
- 27 System.out.println("我要坚持!!!");
- 28 }
- 29 };
- 30 r1.run();
- 31 System.out.println("=========================");
- 32
- 33 Runnable r2 = () -> System.out.println("我要坚持6666666!!!");
- 34
- 35
- 36 r2.run();
- 37 }
- 38
- 39 //语法格式二:Lambda 需要一个参数,但是没有返回值
- 40 @Test
- 41 public void test2() {
- 42 Consumer<String> con = new Consumer<String>() {
- 43 @Override
- 44 public void accept(String s) {
- 45 System.out.println(s);
- 46 }
- 47 };
- 48 con.accept("我要加油,加快速度");
- 49
- 50 System.out.println("=====================");
- 51
- 52 Consumer<String> con1 = (String s) -> System.out.println(s);
- 53
- 54 con1.accept("我一定要成功!");
- 55
- 56 }
- 57
- 58 //语法格式三:数据类型可以省略,因为可由编译器推断得出,称为“类型推断”
- 59 @Test
- 60 public void test3() {
- 61 Consumer<String> con1 = (String s) -> System.out.println(s);
- 62
- 63 con1.accept("我一定要成功!");
- 64
- 65 System.out.println("=====================");
- 66
- 67 Consumer<String> con2 = (s) -> System.out.println(s);
- 68
- 69 con1.accept("我一定要成功!666666");
- 70 }
- 71
- 72 @Test
- 73 public void test4() {
- 74 ArrayList<String> list = new ArrayList<>();//类型推断
- 75 int[] arr = {1, 2, 3};//类型推断
- 76 }
- 77
- 78 //语法格式四:Lambda 若只需要一个参数时,参数的小括号可以省略
- 79 @Test
- 80 public void test5() {
- 81 Consumer<String> con1 = (s) -> System.out.println(s);
- 82
- 83 con1.accept("我一定要成功!666666");
- 84
- 85 System.out.println("=====================");
- 86
- 87 Consumer<String> con2 = s -> System.out.println(s);
- 88
- 89 con2.accept("我一定要成功!666666");
- 90
- 91 }
- 92
- 93 //语法格式五:Lambda 需要两个或两个以上的参数,多条执行语句,并且可以有返回值
- 94 @Test
- 95 public void test6() {
- 96 Comparator<Integer> com1 = new Comparator<Integer>() {
- 97 @Override
- 98 public int compare(Integer o1, Integer o2) {
- 99 System.out.println(o1);
- 100 System.out.println(o2);
- 101 return o1.compareTo(o2);
- 102 }
- 103 };
- 104 System.out.println(com1.compare(12, 33));
- 105 ;
- 106
- 107 System.out.println("======================");
- 108
- 109 Comparator<Integer> com2 = (o1, o2) -> {
- 110 System.out.println(o1);
- 111 System.out.println(o2);
- 112 return o1.compareTo(o2);
- 113 };
- 114 System.out.println(com2.compare(12, 3));
- 115 ;
- 116
- 117 }
- 118
- 119 //语法格式六:当Lambda 体只有一条语句时,return 与大括号若有,都可以省略
- 120 @Test
- 121 public void test7() {
- 122
- 123 Comparator<Integer> com1 = (o1, o2) -> {
- 124 return o1.compareTo(o2);
- 125 };
- 126 System.out.println(com1.compare(12, 3));
- 127
- 128 System.out.println("======================");
- 129
- 130 Comparator<Integer> com2 = (o1, o2) -> o1.compareTo(o2);
- 131
- 132 System.out.println(com2.compare(12, 3));
- 133
- 134 }
- 135 }