//Sin Lambda:
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("Sin Lambda");
}
}).start();
//Con Lambda:
new Thread( () -> System.out.println("Con Lambda") ).start();
2. 事件处理
// Sin Lambda:
JButton show = new JButton("Show");
show.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("Sin Lambda");
}
});
// Con Lambda:
show.addActionListener((e) -> {
System.out.println("Con Lambda");
});
3. 遍历列表
//Sin Lambda :
List features = Arrays.asList("Lambdas", "Default Method", "Stream API", "Date and Time API");
for (String feature : features) {
System.out.println(feature);
}
//Con Lambda:
List features = Arrays.asList("Lambdas", "Default Method", "Stream API", "Date and Time API");
features.forEach(n -> System.out.println(n));
4. Map 和 Reduce 示例
该代码将适用于每次购买 12%
// Sin Lambda:
List costBeforeTax = Arrays.asList(100, 200, 300, 400, 500);
for (Integer cost : costBeforeTax) {
double price = cost + .12*cost;
System.out.println(price);
}
// Con Lambda:
List costBeforeTax = Arrays.asList(100, 200, 300, 400, 500);
costBeforeTax.stream().map((cost) -> cost + .12*cost).forEach(System.out::println);
事实上,Lambda 表达式以及 Stream API 是 Java 8 中引入的两个最重要的变化,如本介绍性文档中所述。
它有什么好处?
这里有一些:
没有 Lambda:
使用 Lambda:
通向 Java 函数式编程的大门打开了,函数在其中发挥着基础性作用。这意味着能够在运行时将函数作为变量值、返回值或参数传递给其他函数。这是一个非常强大的概念,可以理解为将行为作为值传递的能力,而这正是我们在 Java 语言中加入 lambda 表达式所能实现的。
通过将它们与 Stream API 结合使用,我们可以顺序或并行地对数据集合执行过滤/映射/归约类型的操作,并且它们的实现对开发人员是透明的。
当 lambda 表达式由单个语句组成并通过其名称调用某个现有方法时,就有可能使用引用方法编写它,这使得代码更紧凑且更易于阅读。
代码编写实际上减少了。(在这方面,请参阅文章Lambda 表达式简介中提出的示例案例
它有缺点吗?
嗯,是的,它有一个(尽管我们可以称其为挑战,改善自己,继续学习的挑战不仅仅是一个缺点)。
学习使用 Lambda 表达式(以及 Stream API)需要对我们迄今为止编写 Java 代码的方式进行范式转换。
但是克服这个障碍是有回报的,因为我们手中将拥有一个非常强大的工具,可以让我们的生活更轻松。
一些例子来看看差异
一、实施
Runnable
2. 事件处理
3. 遍历列表
4. Map 和 Reduce 示例
该代码将适用于每次购买 12%
链接