Java lambda 的简明使用

Posted 大树叶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java lambda 的简明使用相关的知识,希望对你有一定的参考价值。

前言

Lambda表达式是Java SE 8中一个重要的新特性,优点与缺点如下:
优点:

  1. 代码量减少,提升了开发效率
  2. 集合操作也得到了极大的改善
  3. 函数式编程是技术的发展方向,而Lambda时函数式编程最基础的内容,所以,Java8中加入Lambda表达式本身时符合技术发展方向的。
  4. 通过引入Lambda,最直观的一个改进是不用再写大量的匿名内部类,还有更多由于函数式编程本身特性带来的提升。比如:代码的可读性会更好,高阶函数引入了函数组合的概念。

Lambda的引入,集合操作也得到了极大的改善。比如:引入Stream API,把map,reduce,filter这样的基本函数式编程的概念与Java集合结合起来。在大多数情况下,处理集合时,Java程序员可以告别for,while,if这些语句,map,reduce,filter等操作都可以并行化,在一些条件下,可以提升性能。
缺点:

  1. 可读性差,与啰嗦的但是清晰的匿名类代码结构比较起来,Lambda表达式一旦变得比较长,就难以理解。
  2. 不便于调试,很难在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 的简明使用的主要内容,如果未能解决你的问题,请参考以下文章

Java 8 lambda表达式

Markdown简明教程

Markdown简明教程

Android开发太难了:Java Lambda ≠ Android Lambda (上)

Android开发太难了:Java Lambda ≠ Android Lambda (上)

Android开发太难了:Java Lambda ≠ Android Lambda (上)