Your first Lambda expression
开始使用Java 8时,首先做的就是使用lambda表达式替换匿名类,而实现Runnable接口是匿名类的最好示例。看一下Java 8之前的runnable实现方法,需要4行代码,而使用lambda表达式只需要一行代码。我们在这里做了什么呢?那就是用() -> {}代码块替代了整个匿名类。
package com.luozhiyuan.java8;
public class LambdaTest {
public static void main(String[] args) {
// java8 之前
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("Thread 匿名内部类实现");
}
}).start();;
//java8 Lambda方式
new Thread(() -> System.out.println("java8 新特性Lambda实现方式")).start();
}
}
输出结果:
Thread 匿名内部类实现
java8 新特性Lambda实现方式
这个例子向我们展示了Java 8 lambda表达式的语法。你可以使用lambda写出如下代码:
(params) -> expression
(params) -> statement
(params) -> { statements }
如果你的方法接收两个参数,那么可以写成如下这样:
(int even, int odd) -> even + odd
总结一下的格式:
params=参数,your Code=你的代码,results=返回值
(params,params) -> {your Code}
如果只有一个参数或者一行代码的话 可以将括号省略掉,于是就变成了
params -> your Code
如果是有返回值是的话是
(params) -> {return results}
同样,这种return只有一行的话,也可以简写,例如
x -> x+1
这就等效于
(x) -> {return x+1}
Lambda使用场景
1.替代匿名内部类
package com.luozhiyuan.java8;
public class LambdaTest {
public static void main(String[] args) {
// java8 之前
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("Thread 匿名内部类实现");
}
}).start();;
//java8 Lambda方式
new Thread(() -> System.out.println("java8 新特性Lambda实现方式")).start();
}
}
2.使用lambda表达式对集合进行迭代
Java的集合类是日常开发中经常用到的,甚至说没有哪个java代码中没有使用到集合类。。。而对集合类最常见的操作就是进行迭代遍历了。请看对比:
package com.luozhiyuan.java8;
import java.util.Arrays;
import java.util.List;
public class LambdaTest {
public static void main(String[] args) {
List<String> list = Arrays.asList("java","php","c++");
// java8 之前
for(String language : list) {
System.out.println(language);
}
//java8 Lambda方式
list.forEach(Language -> System.out.println(Language));
list.forEach(System.out :: println);
}
}