Java lambda 的简明使用
Posted 大树叶
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java lambda 的简明使用相关的知识,希望对你有一定的参考价值。
前言
Lambda表达式是Java SE 8中一个重要的新特性,优点与缺点如下:
优点:
- 代码量减少,提升了开发效率
- 集合操作也得到了极大的改善
- 函数式编程是技术的发展方向,而Lambda时函数式编程最基础的内容,所以,Java8中加入Lambda表达式本身时符合技术发展方向的。
- 通过引入Lambda,最直观的一个改进是不用再写大量的匿名内部类,还有更多由于函数式编程本身特性带来的提升。比如:代码的可读性会更好,高阶函数引入了函数组合的概念。
Lambda的引入,集合操作也得到了极大的改善。比如:引入Stream API,把map,reduce,filter这样的基本函数式编程的概念与Java集合结合起来。在大多数情况下,处理集合时,Java程序员可以告别for,while,if这些语句,map,reduce,filter等操作都可以并行化,在一些条件下,可以提升性能。
缺点:
- 可读性差,与啰嗦的但是清晰的匿名类代码结构比较起来,Lambda表达式一旦变得比较长,就难以理解。
- 不便于调试,很难在Lambda表达式中增加调试信息,比如日志。
使用例子
例子1:Lamda表达式的例子
// 1. 不需要参数,返回值为 5
() -> 5
// 2. 接收一个参数(数字类型),返回其2倍的值
x -> 2 * x
// 3. 接受2个参数(数字),并返回他们的差值
(x, y) -> x – y
// 4. 接收2个int型整数,返回他们的和
(int x, int y) -> x + y
// 5. 接受一个 string 对象,并在控制台打印,不返回任何值(看起来像是返回void)
(String s) -> System.out.print(s)
// 1.1使用匿名内部类
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("Hello world !");
}
}).start();
// 1.2使用 lambda expression
new Thread(() -> System.out.println("Hello world !")).start();
// 2.1使用匿名内部类
Runnable race1 = new Runnable() {
@Override
public void run() {
System.out.println("Hello world !");
}
};
// 2.2使用 lambda expression
Runnable race2 = () -> System.out.println("Hello world !");
// 直接调用 run 方法(没开新线程哦!)
race1.run();
race2.run();
例子二:集合类如何使用lamda (foreach)
1. Map
HashMap<String, Integer> hashMap = new HashMap<>();
hashMap.put("a",1);
hashMap.put("b",2);
hashMap.put("c",3);
hashMap.put("d",4);
hashMap.forEach((k,v)->System.out.println(k+"_"+v.intValue()));
2. Collection
List<User> userList = new ArrayList<>();
for (int i = 0; i < 10; i++) {
userList.add(new User("user" + i, String.valueOf(i)));
}
//开始用lamda访问了
userList.forEach(user -> user.hashCode());
以上是关于Java lambda 的简明使用的主要内容,如果未能解决你的问题,请参考以下文章
Android开发太难了:Java Lambda ≠ Android Lambda (上)