广告
返回顶部
首页 > 资讯 > 精选 >如何在Java8中使用lambda表达式
  • 203
分享到

如何在Java8中使用lambda表达式

2023-06-14 09:06:00 203人浏览 八月长安
摘要

这篇文章给大家介绍如何在Java8中使用lambda表达式,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。 0. 函数式编程    函数式编程(Functional Pr

这篇文章给大家介绍如何在Java8中使用lambda表达式,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

 0. 函数式编程

    函数式编程(Functional Programming)属于编程范式(Programming Paradigm)中的用语,此外还有命令式编程(Imperative Programing)等,有兴趣的同学可以自行了解,我们这里大概解释一下函数式编程,在函数式编程中,输入一旦确定了,输出都确定了,函数调用的结果只依赖于传入的输入变量和内部逻辑,不依赖于外部,这样的写出的函数没有副作用。举个例子:

public class Person{ private int a = 1; public int add(int b){  return a + b; } public int pow(int c){  return c * c; } public static void main(String[] args){  Person p = new Person();  p.add(1);  p.pow(2); }}

    上面代码中add(int b)这个方法就不符合函数式编程,这个函数调用后的结果不确定,它的结果不仅取决于b还取决于字段a。而pow(int c)这函数就是符合函数式编程的典范,只要调用它,输入的值c确定了返回值就肯定确定了。
    在函数式编程中,函数也是一等公民,可以被当做参数传递,可以被赋值,被引用,可以把它当做一种数据类型来对待,如果你会使用javascript之类的语言就可以有更深的体会。如果要深入了解这种编程范式可以自行网上搜素资料了解。

1. lambda表达式

    lambda表达式是jdk8中的新特性,上面讲函数式编程就是引入这个,oracle在jdk8中引入了lambda,从此Java中开始对函数式编程的部分支持。
    Java中lambda表达式的语法结构:(params) -> expression。由三部分构成,第一部分是括号以及括号内部的形式参数,第二部分是"->"箭头符号,第三部分是expression方法体,方法体可以是代码块也可以是执行表达式。

//1. lambda表达式的完整形态:有输入参数,有返回值,有代码块。(int a, int b) -> { int c = a + b; return c;}//2. lambda表达式在某些情况也可以省略一部分 //2.1 当代码块不需要返回值的 时候可以省略return语句  (int a, int b) -> {  int c = a + b; } //2.2 当代码块只有一句的时候可以省略大括号  //并且这种情况默认返回这一句代码的执行结果 (int a, int b) -> a + b; // 同1具有同样的作用 //2.3 形参的类型可以根据函数式接口的里面的方法声明自行推断  //可以省略形参类型 (a, b) -> a + b; // 同1,2.2具有同样的效果 //2.4 当只有一个参数的时候可以省略,形参的小括号 a -> a * a;

    接下来展示一个从定义接口到使用lambda表达式的代码

public class Test1 { private int a = 1; private int b = 2;  public int add1(IAdd add){  return add.add(a,b); } public static void main(String[] args) {  Test1 test1 = new Test1();  // 使用lambda表达式  int c = test1.add1((a, b) -> a + b);  System.out.println(c);  // 使用匿名类  int d = test1.add1(new IAdd(){   @Override   public int add(int a, int b){    return a + b;   }  });  System.out.println(d); }}@FunctionalInterfacepublic interface IAdd { int add(int a, int b);}

    可以看见使用lambda表达式的方式相对于匿名类代码会精简优雅很多,下面给出一个经常使用的例子,创建线程

public class Test(){ public static void main(String[] args) {  Thread t1 = new Thread(new Runable(){   System.out.println("使用匿名类的方式创建线程");  });  Thread t2 = new Thread( () -> System.out.println("使用lambda方式创建线程"));  t1.start();  t2.start();  } }

2. 双冒号::符号

    这个符号第一次看见是在c++里面,在c++里面是一个类似标识作用域解析符号或者范围的符号,描述可能不准确,对c++有兴趣的同学可以自行查找。如果了解c++,这个操作符号就勉强类似类似在c++中函数指针,::在Java里面也可以叫做方法引用,就上面说的函数也是一等公民,这里就类似把方法作为参数传入。前面的例子我们使用lambda表达式都类似使用匿名类实现接口的方法,然而还有一种情况我们并不想要自己去实现接口的方法,只是想传进去一个已经有过实现了的方法,就可以使用::,它的语法规则如下:
                  类名::静态方法名 或者 类的实例::实例方法。

List<File> list = new ArrayList<>;list.forEach(File::getName); // 使用双冒号传递一个函数进来,list.forEach( file -> file.getName()); // 使用正常的lambda表达式

3. Optional类

    Optional也是jdk8中的一个新的类的,它给予我们更加优雅的方式来处理Java语言中的NPE异常。可以从一定程度上代替if判断, 介绍相关接口:

  • empty 创建一个空的Optional对象

  • of 和ofNullable

of创建一个Optional对象, 如果传入的参数为空则跑出NPE异常.
ofNullable和上面一样, 但是当传入参数为空的时候会调用empty方法创建一个空Optional对象.

Optional<String> of = Optional.of("waxxd");// 传入空参数会抛出NullPointerException异常Optional<String> ofNull = Optional.of(null); // 以下两句都正常执行Optional<String> ofNullable = Optional.ofNullable("waxxd");// 参数为空的时候相当调用Optional.empty()Optional<String> ofNullableNull = Optional.ofNullable(null);

get/orElse/orElseGet/orElseThrow

// get 获取Option包裹的值如果值为null则抛出NoSuchElementException异常String aa = Optional.of("aa").get();// orElse 获取值如果值为空则返回orElse设置的默认值String aa1 = Optional.of("aa").orElse("bb");// orElseGet 获取值如果值为空则内部可以是一个实现Supplier接口的匿名内部类调用提供返回结果String aa2 = Optional.of("aa").orElseGet( () -> "aaa".toUpperCase());// orElseThrow获取值如果不存在则抛出后面的异常Optional.empty().orElseThrow(IllegalArgumentException::new);// 实际的应用, 也就是上文所说的如何优化if// 比如你有个接口, 用户传入参数Integer type, 用户也可以选择不传, 不传我们为它设置默认值1public void f(Integer type){if(type = null) {type = 1;}Optional.ofNullable(type).orElse(1);}

关于如何在Java8中使用lambda表达式就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

--结束END--

本文标题: 如何在Java8中使用lambda表达式

本文链接: https://www.lsjlt.com/news/269870.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何在Java8中使用lambda表达式
    这篇文章给大家介绍如何在Java8中使用lambda表达式,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。 0. 函数式编程    函数式编程(Functional Pr...
    99+
    2023-06-14
  • lambda表达式如何在JAVA8中使用
    这期内容当中小编将会给大家带来有关lambda表达式如何在JAVA8中使用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一:什么是 Stream?Stream(流)是一个来自数据源的元素队列并支持聚合操作...
    99+
    2023-06-15
  • lambda表达式怎么在Java8中使用
    lambda表达式怎么在Java8中使用?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。lambda 表达式的语法lambda 表达式由参数,->,以及函数体三部分组成。其...
    99+
    2023-05-31
    java8 lambda ava
  • 怎么在Java8中使用Lambda表达式
    怎么在Java8中使用Lambda表达式?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1. lambda表达式介绍lambda表达式是Java8提供的新特性之一,也可以称之为闭...
    99+
    2023-06-14
  • 如何正确的在Java8中使用lambda表达式
    如何正确的在Java8中使用lambda表达式?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1.基本介绍lambda表达式,即带有参数的表达式,为了更清晰地理解lambda...
    99+
    2023-05-31
    java8 lambda ava
  • lambda表达式在java8中的使用方法
    这篇文章给大家介绍lambda表达式在java8中的使用方法,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。定义 TantanitReader:public class TantanitReader { private ...
    99+
    2023-05-31
    java8 lambda ava
  • lambda表达式如何正确的在Java8项目中使用
    这篇文章给大家介绍lambda表达式如何正确的在Java8项目中使用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。在Java8 里面Lambda是最火的主题,不仅仅是因为语法的改变,更重要的是带来了函数式编程的思想,我...
    99+
    2023-05-31
    java8 lambda ava
  • java8中的lambda表达式简介
    目录Lambda表达式的语法Lambda表达式作用域方法引用指向静态方法的方法引用指向任意类型实例方法的方法引用指向现有对象的实例方法的方法引用构造方法引用lambda与匿名内部类匿...
    99+
    2022-11-13
  • lambda表达式在Java8中的作用有哪些
    本篇文章给大家分享的是有关lambda表达式在Java8中的作用有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1.关于JSR335JSR是Java Specificati...
    99+
    2023-05-31
    java8 lambda
  • Java8新特性之Lambda表达式的使用
    目录1. lambda表达式介绍2. lambda表达式的重要特征3. lambda表达式对域外变量的限制4. lambda表达式的优缺点5. lambda表达式的使用场景1. la...
    99+
    2022-11-12
  • Java8中Lambda表达式的理解与应用
    目录简介正文1.lambda的语法2.为啥引入lambda3.什么是函数式接口4.什么是行为参数化5.手写一个函数式接口6.常用的函数式接口7.什么是方法引用8.什么是构造引用9.l...
    99+
    2022-11-13
  • 详解Java8如何使用Lambda表达式进行比较
    目录支持Lambda的基本排序无类型定义的基本排序使用引用静态方法进行排序Sort Extracted Comparators反向排序使用多个条件进行排序使用多个条件排序-组合使用S...
    99+
    2022-11-13
  • 深入浅析Java8中的lambda表达式
    深入浅析Java8中的lambda表达式?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。函数式接口函数式接口(functional interface 也叫功能性接口,其实是同一...
    99+
    2023-05-31
    java8 lambda ava
  • Lambda表达式如何在Android 中使用
    这篇文章给大家介绍Lambda表达式如何在Android 中使用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1.Lambda表达式的基本写法如果想要在 Android 项目中使用 Lambda表达式 或者 Java8...
    99+
    2023-05-31
    android lambda roi
  • lambda表达式如何在java中使用
    这篇文章给大家介绍lambda表达式如何在java中使用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Lamda表达式λ 希腊字母表中排序第十一位字母,英语名称为Lambda避免匿名内部类定义过多其实质属于函数式 编程...
    99+
    2023-06-14
  • Java8怎么使用Lambda表达式进行比较
    本篇文章为大家展示了Java8怎么使用Lambda表达式进行比较,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。在Java 8之前,对集合进行排序需要为排序中使用的比较器 Comparato...
    99+
    2023-06-29
  • java8中lambda表达式的语法是什么
    这篇文章主要介绍“java8中lambda表达式的语法是什么”,在日常操作中,相信很多人在java8中lambda表达式的语法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”java8中lambda表达式...
    99+
    2023-07-02
  • 【javaSE】 Lambda表达式与Lambda表达式的使用
    文章目录 🌳Lambda表达式的背景🚩Lambda表达式的语法🚩函数式接口 🎋Lambda表达式的基本使用🎄...
    99+
    2023-09-15
    开发语言 java Lambda表达式 源码
  • java8中的lambda表达式,看这篇绝对够
    目录Lambda表达式特性一、lambda表达式介绍1.1 lambda表达式结构 1.2 常见的Lambda表达式1.3 基本语法1.4 类型检查1.5 类型推断1.6 ...
    99+
    2022-11-13
  • 如何在Java项目中使用lambda表达式
    这期内容当中小编将会给大家带来有关如何在Java项目中使用lambda表达式,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Java8引入了lambda表达式。lambda表达式并不是新功能,只是为了方便代...
    99+
    2023-05-31
    java lambda ava
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作