前言

在这之前,看了好多关于Lambda文章。说实话,看过之后,基本,没看懂。在知乎中,看到大佬讲的,通俗易懂。我们在学习的过程中,尽量找一些技巧去理解问题,把复杂变简单,才是最好的方法。

什么是Lambda

先说一说常识: 我们可以把一个 赋给一个java变量

int a = 2;

String me = "I LOVE YOU";

上面没有异议吧,继续。有时候,一个 不太够,想把 一段代码拿过来用怎么办?

Lambda 的作用就是把 一块代码 赋给一个变量。

具体操作步骤:
Java Lambda 理解

这就是一个Lambda的表达式

Lambda表达式有什么用?
最直观的作用就是使得代码变得异常简洁

再来看一些实例:


Runnable run = () -> System.out.println("Hello World");// 1

ActionListener listener = event -> System.out.println("button clicked");// 2 

Runnable multiLine = () -> {// 3
System.out.println("Hello "); 
System.out.println("World"); 
}; 


BinaryOperator<Long> add = (Long x, Long y) -> x + y;// 4 

BinaryOperator<Long> addImplicit = (x, y) -> x + y;// 5

得出的结论:

  • Lambda表达式是有类型的,赋值操作的左边就是类型。
  • Lambda表达式的类型实际上是对应接口的类型。Lambda表达式可以包含多行代码,需要用大括号把代码块括起来,就像写函数体那样。
  • 大多数时候,Lambda表达式的参数表可以省略类型,就像代码2和5那样。这得益于javac的类型推导机制,编译器可以根据上下文推导出类型信息。

Lambda表达式和Stream

Stream就是一组元素的序列,支持对这些元素进行各种操作,而这些操作是通过Lambda表达式指定的。可以把Stream看作Java Collection的一种视图,就像迭代器是容器的一种视图那样(但Stream不会修改容器中的内容)

**实例 **

假设需要从一个字符串列表中选出以数字开头的字符串并输出 java7


List<String> list = Arrays.asList("1one", "two", "three", "4four"); 
    for(String str : list){ 
        if(Character.isDigit(str.charAt(0))){
        System.out.println(str); 
        }
}

java 8


List<String> list = Arrays.asList("1one", "two", "three", "4four");
list.stream()// 1.得到容器的Steam 
                .filter(str -> Character.isDigit(str.charAt(0)))// 2.选出以数字开头的字符串 
                .forEach(str -> System.out.println(str));// 3.输出字符串

Stream有两个明显的好处:

  1. 减少了模板代码,只用Lambda表达式指明所需操作,代码语义更加明确、便于阅读。

  2. 将外部迭代改成了Stream的内部迭代,方便了JVM本身对迭代过程做优化(比如可以并行迭代)。

参考文章:
java Lambda初探

知乎 java Lambda理解

相关文章:

  • 2021-07-10
  • 2021-11-11
  • 2021-07-25
  • 2021-10-04
  • 2023-03-20
猜你喜欢
  • 2022-02-07
  • 2022-12-23
  • 2022-12-23
  • 2021-12-17
  • 2022-01-18
  • 2021-09-16
相关资源
相似解决方案