Java8最值得学习的特性就是Lambda表达式和Stream API,如果有用过Scala语言,对理解Lambda表达式有很大帮助.
lambda写的好可以极大的减少代码冗余,同时可读性也好过冗长的内部类,匿名类。
什么是Lambda编程模式?
简单来讲,就是有面向对象的Java程序员,改用函数式编程的方法来工作.
之前我们想要将行为传入函数,仅有的选择就是匿名内部类。Java8发布以后,lambda表达式将大量替代匿名内部类的使用,简化代码的同时,更突出了原来匿名内部类中最重要的那部分包含真正逻辑的代码。
01 接口实现替代匿名内部列
- 之前的写法
public class TestLambda {
interface LamInterface {
public void say(String content);
}
public static void main(String[] args) {
LamInterface face = new LamInterface() {
@Override
public void say(String content) {
System.out.println(content);
}
};
face.say("hello");
}
}
- lambda表达式写法
public class TestLambda {
interface LamInterface {
public void say(String content);
}
public static void main(String[] args) {
LamInterface face = (String content) -> System.out.println(content);
face.say("hello");
}
02 集合的迭代
- 之前的方式
public class TestLambda {
public static void main(String[] args) {
List<List<String>> lists = new ArrayList<>();
// 初始化
for (int i = 0; i < 10; i++) {
List<String> list = new ArrayList<>();
lists.add(list);
}
// 添加数据
for (List<String> list : lists) {
for (int i = 0; i < 10; i++) {
list.add(i + "");
}
}
// 迭代数据
for (List<String> list : lists) {
for (String s : list) {
System.out.print(s);
}
}
}
}
- lamda表达式方式
public class TestLambda {
public static void main(String[] args) {
List<List<String>> lists = new ArrayList<>();
// 初始化
for (int i = 0; i < 10; i++) {
List<String> list = new ArrayList<>();
lists.add(list);
}
// 添加数据
for (List<String> list : lists) {
for (int i = 0; i < 10; i++) {
list.add(i + "");
}
}
// 迭代数据
lists.forEach(strlists -> {
strlists.forEach(str -> System.out.println(str));
});
}
}