lambda表达式允许你通过表达式来代替功能接口。lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块)。

Lambda表达式还增强了集合库。 Java SE 8添加了2个对集合数据进行批量操作的包: java.util.function 包以及java.util.stream 包。

实现一个接口(功能接口)中的唯一方法(老办法):

1、接口中的方法无返回值:

1 packageJDK8Test;2 interfaceRunTask3 {4 voidrun();5 }6 public classMain7 {8

9 public static voidmain(String[] args)10 {11 RunTask r=newRunTask()12 {13 public voidrun()14 {15 System.out.println("我是线程要执行的任务");16 }17 };18 r.run();19 }

20 }

首先要创建一个类,这个类实现了这个功能接口,然后在类中对方法进行实现。然后实例化一个这个类的对象r,由对象调用run()方法。(此处使用匿名内部类)

Lambda表达式形式:

Java提供了一个新的操作符"->" 这个操作符之前有一个括号,括号里面就是接口中的那个唯一的方法的参数列表,操作符后面就是我们以前实现接口中的方法中的语句,具体就以上面的代码为参照。

使用前提:

①接口中就只有一个抽象方法,也就是我们刚刚定义的接口,里面就只能有一个抽象方法。

2、接口中的方法有返回值:

1 packageJDK8Test;2 interfaceRunTask3 {4 String run();5 }6 public classMain7 {8 public static voidmain(String[] args)9 {10 RunTask r=()->System.currentTimeMillis()%2==0?"当前的毫秒值能被2整除":"不能被2整除";11 String value=r.run();12 System.out.println(value);13 }14 }

也就是说,如果返回值是一个String类型的,则”->”后面跟的就必须是一个字符串。调用run()方法时,返回的就是这个字符串。

3、接口中的方法有参数:

1 packageJDK8Test;2 interfaceRunTask3 {4 String run(String name);5 }6 public classMain7 {8 public static voidmain(String[] args)9 {10 RunTask r=(who)->who+"在调用我";11 String value=r.run("Peter");12 System.out.println(value);13 }14 } //输出 Peter在调用我

操作符"->“前面的括号中写了一个参数的变量名,然后你可以看到这个变量在后面的语句中我们就可以使用了!方法中的参数接收一个String类型的,所以who这个变量就必须是字符串类型的,所以who前面可以加一个String。

4、实现比较器接口:

1 packageJDK8Test;2 import java.util.*;3

4 public classMain5 {6 public static voidmain(String[] args)7 {8 ArrayList list=new ArrayList();9 list.add(5);10 list.add(8);11 list.add(6);12 System.out.println(list);13 Collections.sort(list, (Integer a,Integer b)->a-b);14 System.out.println(list);15 }16 }17 //[5, 8, 6]18 //[5, 6, 8]

可以看得到”->" 操作符前面是接口中的方法的参数列表,后面是实现接口的方法中的表达式。

5、实现Consumer接口,遍历集合(老方法):

1 packageJDK8Test;2 importjava.util.ArrayList;3 importjava.util.function.Consumer;4

5 public classMain6 {7 public static voidmain(String[] args)8 {9 ArrayList list=new ArrayList();10 list.add(5);11 list.add(8);12 list.add(6);13 Two two=newTwo();14 list.forEach(two);15 }16 }17 class Two implements Consumer

18 {19 public voidaccept(Integer t)20 {21 System.out.println("遍历中"+t);22 }23 }24 /*输出:25 遍历中526 遍历中827 遍历中628 */

Lambda表达式方法:

1 packageJDK8Test;2 importjava.util.ArrayList;3 importjava.util.function.Consumer;4

5 public classMain6 {7 public static voidmain(String[] args)8 {9 ArrayList list=new ArrayList();10 list.add(5);11 list.add(8);12 list.add(6);13 Consumer r=(Integer t)->System.out.println("遍历中"+t);14 list.forEach(r);15 }16 }17 /*输出:18 遍历中519 遍历中820 遍历中621 */

5、”->”后面有{}包裹:

1 packageJDK8Test;2 importjava.util.ArrayList;3 importjava.util.Collections;4 importjava.util.function.Consumer;5

6 public classMain7 {8 public static voidmain(String[] args)9 {10 ArrayList list=new ArrayList();11 list.add(5);12 list.add(8);13 list.add(6);14 System.out.println(list);15 Collections.sort(list, (Integer a,Integer b)->{return a-b;});16 System.out.println(list);17 }18 }19 /*输出:20 [5, 8, 6]21 [5, 6, 8]22 */

没有{}和有{}的区别是:

①没有{}包裹的不用写return 关键字,有{}包裹的,如果有返回值,必须使用return 关键字返回数据

②没有{}包裹的只能写一个语句,而有{}包裹的可以写任意多条语句。

java lambda使用_Java 8 Lambda表达式的使用相关推荐

  1. java lambda 实现_Java 8 Lambda实现原理分析

    PDF文档已上传Github 为了支持函数式编程,Java 8引入了Lambda表达式,那么在Java 8中到底是如何实现Lambda表达式的呢? Lambda表达式经过编译之后,到底会生成什么东西呢 ...

  2. java lambda 实现_Java 8 Lambda实现原理分析(转载)

    原文出处:http://www.cnblogs.com/WJ5888/p/4618465.html 为了支持函数式编程,Java 8引入了Lambda表达式,那么在Java 8中到底是如何实现Lamb ...

  3. java lambda 变量_java – 从lambda表达式引用的局部变量必须...

    您只需将readln2的值复制到最终变量中即可: final String labelText = readln2 ; Button button = new Button("Click t ...

  4. java块语句_Java运算符、表达式、语句块

    一.运算符 在java中用于程序计算的操作i发统称为运算符,运算符分为如下几类: 1.算术运算符 算术运算符 说明 + 加号两边是数值,可以运算,如果一边存在字符串,则当作连接符 a+b - 两个数相 ...

  5. java 文件路径表达式_Java基础(二十二) Lambda表达式和File类

    函数式编程思想 强调的是做什么,而不是以什么样的方式来做,它忽略了面向对象的复杂语法,只要能够获取到结果,谁去做的,怎么做的,都不重要,重要的是结果,不重视过程. 冗余的Runnable代码 传统的写 ...

  6. java lambda表达式条件_Java 8 Lambda表达式一看就会

    匿名内部类的一个问题是:当一个匿名内部类的实现非常简单,比如说接口只有一个抽象函数,那么匿名内部类的语法有点笨拙且不清晰.我们经常会有传递一个函数作为参数给另一个函数的实际需求,比如当点击一个按钮时, ...

  7. java lambda函数_Java SE 8新功能介绍:使用Lambda Expression进行函数式编程

    java lambda函数 " Java SE 8新功能浏览 "系列的这篇文章将深入了解Lambda表达式 . 我将向您展示Lambda表达式的几种不同用法. 它们都具有功能接口的 ...

  8. 【Java】Java8新特性Lambda表达式和Stream API

    Lambda表达式是实现支持函数式编程技术的基础. 函数式编程与面向对象编程:函数式编程将程序代码看作数学中的函数,函数本身作为另一个函数参数或返回值,即高阶函数.而面向对象编程按照真实世界客观事物的 ...

  9. java 匿名函数_Java中的lambda匿名函数使用

    Java中的lambda匿名函数使用 lambda匿名函数的使用是为了满足某些情况下需要临时定义函数,或者事先定义,需要时才使用.在python里面,lambda表达式的表达方式为:lambda 参数 ...

最新文章

  1. 【laravel7.x中文文档】Redis
  2. Linux开发工具的使用
  3. 2021贵州毕节高考成绩查询,2021贵州毕节选调生考试排名查询入口-时间(已开通)...
  4. 第九章:文件系统管理
  5. 高级C语言教程-作用域
  6. OpenCV HDF和建立群组Group
  7. 选择在共享模式中运行时使用的采样频率和位深度_【仪器】示波器的使用以及基本原理...
  8. 两种过年烟花,你喜欢哪一种(HTML+CSS+JS)
  9. 向量时钟Vector Clock in Riak
  10. python获取钉钉日志数据_python3实现zabbix告警推送钉钉的示例
  11. 判断是否是2的N次方各方法运行速度比较
  12. 比python好_这就是为什么Python比R更好的原因
  13. NoSQL解决方案比较
  14. mfc控件随框变化(EasySize的用法,仔细看绝对有用)
  15. android4以上版本读写外置sd卡报错的解决办法
  16. php 统计页面跳失率,究竟网店各页面的跳失率大小为多少才算正常水平?
  17. uni-app获取车牌号
  18. biosrecovery什么意思_卡刷和线刷手机什么意思 Recovery使用方法
  19. 程序员被老板要求两个月做个app, 要不比京东差,网友:辞职吧
  20. 2022最新:8种常用DNA甲基化测序技术,你知道几个?|易基因

热门文章

  1. ‘Series‘ object has no attribute ‘sort‘
  2. 深度学习动手入门:GitHub上四个超棒的TensorFlow开源项目
  3. Lock和synchronized比较详解
  4. Zabbix监控交换机设置方法
  5. linux 编译openmp,Linux 系统中OpenMP
  6. esxi安装ghost win7_针对Win7远程桌面的攻击实践(完美)
  7. python考试题库 pcap_使用Python修改PCAP
  8. mysql数据压缩加密_MySQL 加密/压缩函数
  9. linux模块化机制,Linux模块化机制和module_init
  10. linux系统中怎么驱动U盘