Lambda表达式之Java
1 Lambda表达式的标准格式: 2 由三部分组成: 3 a.一些参数 4 b.一个箭头 5 c.一段代码 6 格式: 7 (参数列表) -> {一些重写方法的代码}; 8 解释说明格式: 9 ():接口中抽象方法的参数列表,没有参数,就空着;有参数就写出参数,多个参数使用逗号分隔 10 ->:传递的意思,把参数传递给方法体{} 11 {}:重写接口的抽象方法的方法体 12 13 package com.ding.demo1; 14 15 /** 16 * @Description TODO 17 * @Author 丁帅帅 18 * @Date 21/07/06 19:59 19 * @Version 1.0 20 */ 21 public interface Cook { 22 public abstract void makeFood(); 23 } 24 25 26 27 package com.ding.demo1; 28 29 /** 30 * @Description TODO 31 * @Author 丁帅帅 32 * @Date 21/07/06 20:03 33 * @Version 1.0 34 */ 35 public class Demo1Cook { 36 37 public static void main(String[] args) { 38 39 /** 40 * 调用invokeCook方法,参数是Cook接口,传递Cook接口的匿名内部类对象 41 */ 42 invokeCook(new Cook() { 43 @Override 44 public void makeFood() { 45 System.out.println("吃饭啦!!!"); 46 } 47 }); 48 49 /** 50 * 使用Lambda表达式,简化内部类的书写 51 */ 52 53 invokeCook(()->{ 54 System.out.println("吃饭啦!!"); 55 }); 56 57 //优化省略Lambda 58 invokeCook(()-> System.out.println("吃饭啦!")); 59 } 60 61 /** 62 * 参数传递Cook接口,方法内部调用Cook接口中的方法makeFood 63 * @param cook 64 */ 65 public static void invokeCook(Cook cook){ 66 cook.makeFood(); 67 } 68 } 69 package com.ding.demo2; 70 71 /** 72 * @Description TODO 73 * @Author 丁帅帅 74 * @Date 21/07/06 20:21 75 * @Version 1.0 76 */ 77 public class Person { 78 79 private String name; 80 private int age; 81 82 public Person() { 83 } 84 85 public Person(String name, int age) { 86 this.name = name; 87 this.age = age; 88 } 89 90 public String getName() { 91 return name; 92 } 93 94 public void setName(String name) { 95 this.name = name; 96 } 97 98 public int getAge() { 99 return age; 100 } 101 102 public void setAge(int age) { 103 this.age = age; 104 } 105 106 @Override 107 public String toString() { 108 return "Person{" + 109 "name='" + name + '\'' + 110 ", age=" + age + 111 '}'; 112 } 113 } 114 115 116 117 package com.ding.demo2; 118 119 import java.util.Arrays; 120 import java.util.Comparator; 121 122 /** 123 * @Description TODO 124 * @Author 丁帅帅 125 * @Date 21/07/06 20:23 126 * @Version 1.0 127 */ 128 public class DemoArrays { 129 public static void main(String[] args) { 130 Person [] arr={ 131 new Person("张三",30), 132 133 new Person("李四",25), 134 135 new Person("王二",40) 136 }; 137 138 139 //根据年龄进行升序 140 /* Arrays.sort(arr, new Comparator<Person>() { 141 @Override 142 public int compare(Person o1, Person o2) { 143 return o1.getAge()-o2.getAge(); 144 } 145 });*/ 146 147 //使用Lambda表达式简化匿名内部类 148 Arrays.sort(arr,(Person o1,Person o2)->{ 149 return o1.getAge()-o2.getAge(); 150 }); 151 152 //优化省略Lambda 153 Arrays.sort(arr,(o1,o2)->o1.getAge()-o2.getAge()); 154 155 //遍历数组 156 for(Person p:arr){ 157 System.out.println(p); 158 } 159 160 } 161 } 162 package com.ding.demo3; 163 164 /** 165 * @Description TODO 166 * @Author 丁帅帅 167 * @Date 21/07/06 20:40 168 * @Version 1.0 169 */ 170 public interface Calculator { 171 172 public abstract int calc(int a,int b); 173 } 174 175 176 177 package com.ding.demo3; 178 179 /** 180 * @Description TODO 181 * @Author 丁帅帅 182 * @Date 21/07/06 20:41 183 * @Version 1.0 184 */ 185 public class DemoCalculator { 186 187 public static void main(String[] args) { 188 invokeCalc(10, 20, new Calculator() { 189 @Override 190 public int calc(int a, int b) { 191 return a+b; 192 } 193 }); 194 195 //使用Lambda表达式 196 invokeCalc(10,5,(int a,int b)->{ 197 return a+b; 198 }); 199 200 //优化省略Lambda 201 invokeCalc(2,3,(a,b)->a+b); 202 203 } 204 205 206 public static void invokeCalc(int a,int b,Calculator c){ 207 int sum=c.calc(a,b); 208 System.out.println(sum); 209 } 210 }
道阻且长,行则将至