一、lambda的直观形式:
()->{}
(参数列表)->{方法体代码}
二、关于Lambda表达式的理解
1、函数编程式思想,不关注对象,更关注对数据进行操作
2、lambda表达式是对匿名内部类的优化
三、Lambda省略规则
1、参数类型可以省略
2、小括号内参数只有一个,小括号可以省略
3、大括号内方法体只有一句代码时,return和大括号可以省略
四、代码展示
package com.atxiaoyao.lambda;
public class LambdaDemo01 {
public static void main(String[] args) {
/* new Thread(new Runnable() {
@Override
public void run() {
System.out.println("中华人民共和国");
}
}).start();*/
new Thread(()->{
System.out.println("中华人民共和国");
}).start();
}
}
package com.atxiaoyao.lambda;
import java.util.function.IntBinaryOperator;
public class LambdaDemo02 {
public static void main(String[] args) {
// 原始结构
/* int i = calculateNum(new IntBinaryOperator() {
@Override
public int applyAsInt(int a, int b) {
return a + b;
}
});
System.out.println("i = " + i);*/
// lambda表达式
/* int i = calculateNum((int a, int b) -> {
return a + b;
});
System.out.println(i);*/
// 进一步简化
int i = calculateNum((a, b) -> a + b);
System.out.println("i = " + i);
}
public static int calculateNum(IntBinaryOperator operator) {
int a = 10;
int b = 20;
return operator.applyAsInt(a, b);
}
}
package com.atxiaoyao.lambda;
import java.util.function.IntPredicate;
public class LambdaDemo03 {
// 函数编成关注的是具体的参数列表和方法体 不需要关注方法名是什么
public static void printNum(IntPredicate predicate){
int[] arr = {1,2,3,4,5,6,7,8,9,10};
for (int i : arr) {
if (predicate.test(i)){
System.out.println(i);
}
}
}
public static void main(String[] args) {
/* printNum(new IntPredicate() {
@Override
public boolean test(int value) {
return value%2 == 1;
}
});*/
// lambda表达式
printNum(value -> value%2 == 0);
}
}
package com.atxiaoyao.lambda;
import java.util.function.Function;
public class LambdaDemo04 {
public static <R> R typeConver(Function<String,R> function){
String str = "1234";
R result = function.apply(str);
return result;
}
public static void main(String[] args) {
/* Integer integer = typeConver(new Function<String, Integer>() {
@Override
public Integer apply(String s) {
return Integer.parseInt(s);
}
});
System.out.println("integer = " + integer);*/
// Lambda表达式
Integer integer = typeConver(s ->
Integer.parseInt(s)
);
System.out.println("integer = " + integer);
}
}