目录

  • 一、Java 8 Lambda表达式
    • 1、出现的背景
    • 2、Lambda表达式简介
    • 3、Lambda 表达式的结构
    • 4.什么是功能接口(Functional interface)
    • 5、 Lambda 表达式的例子

一、Java 8 Lambda表达式

1、出现的背景

java是一流的面向对象语言,除了部分简单数据类型java中的一切都是对象,即使数组也是一种对象,每个类创建的实例也是对象。在java中定义的函数或方法不可能完全独立,也不能将方法作为参数或返回一个方法给实例。

  • 首先回顾使用Arrays工具类的sort()方法,是升序排序
  • 如果想让一个数组降序呢?采用sort方法中的compare( );对数组中的每个元素进行比较。
  • 底层sort() 实现了comparator接口
  • comparator接口中用compare方法进行比较
  • 在实现比较接口的外部定义一个比较规则

public class StringCom implements Comparator<String> {@Overridepublic int compare(String o1, String o2) {return o2.compareTo(o1);}
}
  • 进行降序排序
  • 还可以定义一个内部类
    /*内部类  不需要在外部创建类*/static class StringCom1 implements Comparator<String>{@Overridepublic int compare(String o1, String o2) {return o2.compareTo(o1);}}
  • 降序排序
  • 还可以定义一个匿名内部类,进行降序排序
  • 在上面的例子中,对集合进行排序需要重新接口中的方法,来进行排序功能。在java里将普通方法或函数像参数一样传值并不简单,所以java8增加了Lambda表达式。

2、Lambda表达式简介

  • lambda是匿名函数,一般在方法的参数为接口时,代替之前写的匿名内部类。语法为:(arg1, arg2…) -> { body };(a,b) 参数类型可以不写,可以自动类型推断
  • 怎么推断?
  • 要求接口中只能有一个抽象方法
  • Lambda表达式的目的就是使用更少的代码来实现同样的功能。

3、Lambda 表达式的结构

  1. Lambda 表达式可以具有零个,一个或多个参数。
  2. 可以显式声明参数的类型,也可以由编译器自动从上下文推断参数的类型。例如 (int a,int b)与 (a,b)相同。
  3. 参数用小括号括起来,用逗号分隔。例如 (a, b) 或 (int a, int b) 或 (String a, int b, float c)。
  4. 空括号用于表示一组空的参数。例如 () -> 42。
  5. 当有且仅有一个参数时,如果不显式指明类型,则不必使用小括号。例如 a -> return a*a。
  6. Lambda 表达式的正文可以包含零条,一条或多条语句。
  7. 如果 Lambda 表达式的正文只有一条语句,则大括号可不用写,且表达式的返回值类型要与匿名函数的返回类型相同。
  8. 如果 Lambda 表达式的正文有一条以上的语句必须包含在大括号(代码块)中,且表达式的返回值类型要与匿名函数的返回类型相同。

4.什么是功能接口(Functional interface)

  • 功能接口时java8中新增功能,只允许一个抽象方法。这些接口也称为单抽象方法接口。这些也可以使用 Lambda 表达式,方法引用和构造函数引用来表示。Java 8 也引入了一个注释,即@FunctionalInterface,当你注释的接口违反了 Functional Interface 的契约时,它可以用于编译器级错误。
  • eg:监听事件addActionListener() 事件处理
     JButton jButton =new JButton("按钮");//匿名内部类写法jButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {}});//lambda写法jButton.addActionListener((e)->{System.out.println("aaaa");});

  • ActionListener() 接口;它里面就是有一个抽象方法,虽然没有@FunctionalInterface注解;但是也符合Lambda表达式的规则;

5、 Lambda 表达式的例子

  • 线程初始化
       new Thread(new Runnable() {@Overridepublic void run() {}});new Thread(()->{System.out.println("Aaaa");});

-遍历输出

 //一般方法List<Integer> list = new ArrayList<>();list.add(1);list.add(2);list.add(5);for (Integer n : list) {System.out.println(n);}// 使用 Lambda 表达式list.forEach(n -> System.out.println(n));

java8--Lambda表达式相关推荐

  1. java8 lambda表达式实现自定义用户组件,Don't Repeat Yourself

    2019独角兽企业重金招聘Python工程师标准>>> 一.用户组件的功能 使用java8 lambda表达式实现实现世界的一个例子:用户组件.此用户组件有以下几个操作:获取用户列表 ...

  2. Java8————Lambda表达式(二)

    译者注:文中内容均来自于官方教程<Lambda Expressions>,但是由于英汉语言的差异,部分语句官方描述过于冗余,因此译者根据通常状况的理解做了微调,但不会影响表达的含义.比如: ...

  3. lambda 对象去重_采用java8 lambda表达式 实现 java list 交集 并集 差集 去重复并集...

    采用java8 lambda表达式 实现java list 交集/并集/差集/去重并集 一般的javaList 交.并集采用简单的 removeAll retainAll 等操作,不过这也破坏了原始的 ...

  4. lambda学习视频和stream学习视频(Java8 Lambda表达式视频教程)-Java爬虫-网络购物的正确打开方式

    百度网盘 链接:https://pan.baidu.com/s/1upU5EVXOQeho6poDYdnhiQ 提取码:088l Java8 Lambda表达式视频教程 https://www.bil ...

  5. Java8 lambda表达式,Comparator.comparing().thenComparing()报错

    环境 Java:1.8+ 前言 今天发了一个问题: 问题描述: 对List进行排序,如果在Comparator.comparing()方法中,只使用一个字段排序,没有问题. 但是如果使用多字段排序,并 ...

  6. 采用java8 lambda表达式 实现 java list 交集 并集 差集 去重复并集

    采用java8 lambda表达式 实现java list 交集/并集/差集/去重并集 一般的javaList 交.并集采用简单的 removeAll retainAll 等操作,不过这也破坏了原始的 ...

  7. Java8 Lambda表达式详解手册及实例

    先贩卖一下焦虑,Java8发于2014年3月18日,距离现在已经快6年了,如果你对Java8的新特性还没有应用,甚至还一无所知,那你真得关注公众号"程序新视界",好好系列的学习一下 ...

  8. Java8 lambda表达式10个示例

    例1.用lambda表达式实现Runnable // Java 8之前: new Thread(new Runnable() {     @Override     public void run() ...

  9. java8 lambda 视频_一文搞懂Java8 Lambda表达式(附带视频教程)

    Lambda表达式介绍 Java 8的一个大亮点是引入Lambda表达式,使用它设计的代码会更加简洁.通过Lambda表达式,可以替代我们以前经常写的匿名内部类来实现接口.Lambda表达式本质是一个 ...

  10. java8 lambda python_【学习笔记】java8 Lambda表达式语法及应用

    本文是慕课网大牧莫邪老师的视频教程一课掌握Lambda表达式语法及应用的学习笔记.如果觉得内容对你有用,可以购买老师的课程支持一下,课程价格1元,十分良心了. 1. 课程介绍 2. 为什么引入Lamb ...

最新文章

  1. andoridView修改
  2. Java的应用领域有哪些呢?分享这几个
  3. H3C S5120-52P-WiNet交换机配置
  4. 顺序表查找+折半查找(二级)
  5. Maven 加载ojdbc14.jar报错,解决方法
  6. 逐步优化求解最大子序列和
  7. 谷歌云使用账号密码_如何使用Google密码检查
  8. 博客侧栏添加恋爱计时框
  9. “Git 不是昙花一现!”
  10. (PPT)Linux服务器基础
  11. 433MHz LoRa/FSK 无线频谱波形分析(频谱分析仪测试LoRa/FSK带宽、功率、频率误差等)
  12. ESC/POS协议打印机工具类(java)
  13. 汽车电工及电子技术基础【3】
  14. learning bamboo flute
  15. 学习管理系统 LMS
  16. 微型计算机usb接口工作方式,一种微型计算机的制作方法
  17. hive中文繁简转化opencc4j
  18. Buffer Pool Manager
  19. 电子数据取证之Android APK分析
  20. HDU 5476 Explore Track of Point 几何题 —— 2015 ACM/ICPC Asia Regional Shanghai Online

热门文章

  1. 记录:The field files exceeds its maximum permitted size of 1048576 bytes...解决方案【亲测有效】
  2. Redis 列表(List) Redis Lpush 命令
  3. Kodi Couldn't Connect to Network Server
  4. 计算机会考题 荷花,小小量词我来填。一()车厢一()纠纷一()荷花一()谜语一()考试一()皮球...
  5. 常用0x000000类型颜色代码表
  6. 苹果笔记本如何打开计算机,苹果笔记本如何进入BIOS设置 Mac怎么设置BIOS
  7. 黑马程序员培训没兄弟会高级
  8. 小程序18问,3分钟快速了解小程序
  9. python去掉左边的空格_Python去除字符串左边空格
  10. 关于EPCS系列芯片的说明