初学者的lambda
1、简介:使用Lambda表达式可以让我们写出更短、更易读的代码。它可以替代传统的匿名类,使代码更加简洁。Lambda表达式还支持函数式编程,这意味着我们可以将函数作为参数传递给其他方法,使得代码更加灵活和可扩展。
2、基本语法
(parameters) -> expression 或 (parameters) ->{ statements; }
Lambda表达式由三部分组成:
paramaters:类似方法中的形参列表,这里的参数是函数式接口里的参数。这里的参数类型可以明确的声明也可不声明而由JVM隐含的推断。另外当只有一个推断类型时可以省略掉圆括号。
->:可明白为“被用于”的意思
方法体:可以是表达式也可以代码块,是函数式接口里方法的实现。代码块可返回一个值或者什么都不反回,这里的代码块块等同于方法的方法体。如果是表达式,也可以返回一个值或者什么都不反回。
详细示例:
package langya.base.lambda;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@FunctionalInterface
interface OneParameterReturn {
int test(int a);
}
@FunctionalInterface
interface MoreParameterReturn {
int test(int a, int b);
}
@FunctionalInterface
interface NoParameterReturn {
int test();
}
@FunctionalInterface
interface OneParameterNoReturn {
void test(int a);
}
@FunctionalInterface
interface MoreParameterNoReturn {
void test(int a, int b);
}
@FunctionalInterface
interface NoParameterNoReturn {
void test();
}
@FunctionalInterface
interface MyFunction {
void printValue();
}
public class Lambda {
public void lambdaTest() {
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8);
System.out.println("单个表达式的lambad");
numbers.forEach(number -> System.out.println(number));
List<Integer> list = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8)) ;
System.out.println("为了能够让 Lambda 和 Java 的集合类集更好的一起使用,集合当中,也新增了部分接口,以便与 Lambda 表达式对接。");
System.out.println("原始list:"+list);
list.removeIf(n -> n % 2 == 0);
System.out.println("修改后list:"+list);
System.out.println("多个语句的lambad");
numbers.forEach(number -> {
int dd = number * 2;
System.out.println("number:" + number + "" + "dd:" + dd);
});
System.out.println("有返回值一个参数的函数式接口");
OneParameterReturn oneParameterReturn = (int a) -> {
System.out.println("有返回值有一个参数!");
a = a * 2;
return a;
};
int ret = oneParameterReturn.test(5);
System.out.println(ret);
System.out.println("有返回值多个参数的函数式接口");
MoreParameterReturn moreParameterReturn = (int a, int b) -> {
System.out.println("有返回值多个参数!");
return a + b;
};
int ret2 = moreParameterReturn.test(5, 2);
System.out.println("a+b=" + ret2);
System.out.println("无参数无返回值");
NoParameterReturn noParameterReturn = () -> {
System.out.println("无参数无返回值");
return 1;
};
int a = noParameterReturn.test();
System.out.println("a:" + a);
System.out.println("一个参数无返回值的函数式接口");
OneParameterNoReturn oneParameterNoReturn = (int d) -> {
System.out.println("一个参数无返回值的函数式接口,参数d的值为:" + d);
};
oneParameterNoReturn.test(20);
System.out.println("多个参数无返回值的函数式接口");
MoreParameterNoReturn moreParameterNoReturn = (int c, int b) -> {
System.out.println("多个参数无返回值的函数式接口,参数c的值为:" + c + ",参数b的值为:" + b);
};
moreParameterNoReturn.test(1, 2);
System.out.println("无参无返回值");
NoParameterNoReturn noParameterNoReturn = () -> {
System.out.println("无参无返回值");
};
noParameterNoReturn.test();
System.out.println("匿名内部类变量捕获");
final int x = 10;
MyFunction myFunction = new MyFunction() {
@Override
public void printValue() {
System.out.println("x:" + x);
}
};
myFunction.printValue();
}
}运行结果为:
单个表达式的lambad
1
2
3
4
5
6
7
8
为了能够让 Lambda 和 Java 的集合类集更好的一起使用,集合当中,也新增了部分接口,以便与 Lambda 表达式对接。
原始list:
修改后list:
多个语句的lambad
number:1dd:2
number:2dd:4
number:3dd:6
number:4dd:8
number:5dd:10
number:6dd:12
number:7dd:14
number:8dd:16
有返回值一个参数的函数式接口
有返回值有一个参数!
10
有返回值多个参数的函数式接口
有返回值多个参数!
a+b=7
无参数无返回值
无参数无返回值
a:1
一个参数无返回值的函数式接口
一个参数无返回值的函数式接口,参数d的值为:20
多个参数无返回值的函数式接口
多个参数无返回值的函数式接口,参数c的值为:1,参数b的值为:2
无参无返回值
无参无返回值
匿名内部类变量捕获
x:104、总结
Lambda 表达式的优点很明显,在代码层次上来说,使代码变得非常的简洁。缺点也很明显,代码不易读。
优点:
[*]代码简洁,开辟迅速
[*]方便函数式编程
[*]非常容易进行并行盘算
[*]Java 引入 Lambda,改善了集合操纵
缺点:
[*]代码可读性变差
[*]在非并行盘算中,很多盘算未必有传统的 for 性能要高
[*]不容易进行调试
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]