Lambda表达式是实现支持函数式编程技术的基础。

函数式编程与面向对象编程:函数式编程将程序代码看作数学中的函数,函数本身作为另一个函数参数或返回值,即高阶函数。而面向对象编程按照真实世界客观事物的自然规律进行分析,客观世界中存在什么样的实体,构建的软件系统就存在什么样的实体。

Lambda表达式是一个匿名方法代码块,可以作为表达式,方法参数和方法返回值。Java中的方法必须声明在类或接口中,Lambda表达式所实现的匿名方法是在函数式接口(函数式接口,有且仅有一个抽象方法,Object的public方法除外。)中声明的。

有关Stream API,可以先看看这篇文章:https://www.cnblogs.com/CarpenterLee/p/6545321.html

下面用几个例子来说明Lambda表达式示例:

1.用lambda表达式实现Runnable

使用lambda表达式替换匿名类,实现Runnable接口是匿名类的最好示例。用() -> {}代码块替代了整个匿名类。

package lambda;
public class LambdaDemo {public static void main(String[] args) {//Java 8之前:new Thread(new Runnable() {@Overridepublic void run() {System.out.println("Before Java8, too much code for too little to do");}}).start();//Java 8方式:new Thread(()->System.out.println("In Java8, Lambda expression rocks !!")).start();}
}

注意:如果Lambda表达式体中只有一条语句,那么可以省略return和大括号。

这个例子向我们展示了Java 8 lambda表达式的语法。

如果你的方法接收两个参数,那么可以写成如下这样:

(int even, int odd) -> even + odd

当然也可以省略参数类型,Lambda表达式可以根据上下文环境推断出参数类型。

如果你的方法不对参数进行修改、重写,只是在控制台打印点东西的话,那么可以这样写:

() -> System.out.println("Hello Lambda Expressions");

2.使用lambda表达式对列表进行迭代

针对集合类,最常见的操作就是进行迭代,并将业务逻辑应用于各个元素,例如处理订单、交易和事件的列表。由于Java是命令式语言,Java 8之前的所有循环代码都是顺序的,即可以对其元素进行并行化处理。如果你想做并行过滤,就需要自己写代码,这并不是那么容易。通过引入lambda表达式和默认方法,将做什么和怎么做的问题分开了,这意味着Java集合现在知道怎样做迭代,并可以在API层面对集合元素进行并行处理。下面的例子里,将介绍如何在使用lambda或不使用lambda表达式的情况下迭代列表。你可以看到列表现在有了一个 forEach() 方法,它可以迭代所有对象,并将你的lambda代码应用在其中。

package lambda;
import java.util.Arrays;
import java.util.List;
public class IteratorDemo {public static void main(String[] args) {// Java 8之前:List features = Arrays.asList("Lambdas", "Default Method", "Stream API", "Date and Time API");for (Object feature : features) {System.out.println(feature.toString());}System.out.println("使用Java 8后:");// Java 8之后:List features2 = Arrays.asList("Lambdas", "Default Method", "Stream API", "Date and Time API");features2.forEach(str -> System.out.println(str));// 使用Java 8的方法引用更方便,方法引用由::双冒号操作符标示,// 看起来像C++的作用域解析运算符features2.forEach(System.out::println);}
}

运行结果:

列表迭代的最后一个例子展示了如何在Java 8中使用方法引用(method reference)。Java 8之后加了双冒号“::”运算符,该运算符用于“方法引用”,注意不是调用方法。

更多Java8 lambda表达式示例请查看这篇文章:https://www.cnblogs.com/coprince/p/8692972.html

【Java】Java8新特性Lambda表达式和Stream API相关推荐

  1. java8新特性-lambda表达式和stream API的简单使用

    一.为什么使用lambda Lambda 是一个 匿名函数,我们可以把 Lambda表达式理解为是 一段可以传递的代码(将代码像数据一样进行传递).可以写出更简洁.更灵活的代码.作为一种更紧凑的代码风 ...

  2. Java8新特性----Lambda表达式详细探讨

    Java8新特性 Lambda表达式 入门演示 案例1 如何解决 cannot be cast to java.lang.Comparable问题? 案例2 优化方式一 : 策略设计模式 优化方式二: ...

  3. Java 8 新特性 lambda表达式

    / Created by Manager on 2021/4/1. Java 8 新特性 lambda表达式 StreamAPI 新日期 新注解 */ 视频连接 1https://www.bilibi ...

  4. Java 8 新特性Lambda 表达式

    Java 8 新特性Lambda 表达式 一.常用循环 二.匿名内部类 三.排序集合 四.循环打印对象 五.根据条件修改 六.排序 七.求和 八.统计方法 九.材料 一.常用循环 public cla ...

  5. java8新特性-lambda表达式入门学习

    定义 jdk8发布新特性中,lambda是一大亮点之一.lambda表达式能够简化我们对数据的操作,减少代码量,大大提升我们的开发效率.Lambda 表达式"(lambda expressi ...

  6. java8新特性lambda表达式、函数式编程、方法引用和接口默认方法以及内部类访问外部变量

    一提到java是一种什么语言? 大多数人肯定异口同声的说是一门面向对象的语言,这种观点从我们开始学java就已经根深蒂固了,但是学到java8新特性函数式编程的时候,我才知道java并不是纯面向对象的 ...

  7. java compare 返回值_关于Java你不知道的那些事之Java8新特性[Lambda表达式和函数式接口]...

    前言 为什么要用Lambda表达式? Lambda是一个匿名函数,我们可以把Lambda表达式理解为是一段可以传递的代码,将代码像数据一样传递,这样可以写出更简洁.更灵活的代码,作为一个更紧凑的代码风 ...

  8. Java8 新特性 -- Lambda表达式:函数式接口、方法的默认实现和静态方法、方法引用、注解、类型推测、Optional类、Stream类、调用JavaScript、Base64

    文章目录 1. Lambda表达式 1.1 Lambda表达式语法 1.2 Lambda表达式示例 1.3 说明:函数式接口 2. 方法的默认实现和静态方法 3. 方法引用 3.1 方法引用示例 4. ...

  9. fundamentals\java\java8新特性-Lambda(译自oracle官网)

    Java8 Lambda Expressions 目录 Java8 Lambda Expression 典型使用场景:Ideal Use Case for Lambda Expressions 问题提 ...

最新文章

  1. Firefox Nightly 让 Android 机用上任意桌面端附加组件 | Expanded extension support in Firefox for Android Nightly
  2. Asp.net安全相关注意的几个问题
  3. python内存管理错误的是_解读Python内存管理机制(转载)
  4. python下载-各种版本的Python下载安装教程
  5. java 远程调试 端口_java – 远程调试:在端口8787上没有连接到OpenJDK 11上的Wildfly 14...
  6. JVM 的GC 算法 分析
  7. 遍历文件夹(含子文件夹)方法
  8. 查询各科成绩最高分、最低分和平均分:以如下形式显示:课程ID,课程name,最高分,最低分,平均分,及格率,中等率,优良率,优秀率--及格为>=60,中等为:70-80,优良为:80-90,优秀为:
  9. 计算机奖学金用英语怎么说,奖学金用英语怎么说
  10. 一个无线遥控通讯协议破解实例
  11. 云服务器突发性能实例t5与通用型服务器的区别?
  12. 电脑键盘equals在哪个位置_学习第二步equals;equals;电脑键盘使用--快捷键大全
  13. 黑窗口下安装MySQL数据库
  14. 关于烈马、将军攻击网站假墙攻击防御方案以及轮询脚本
  15. Google I/O开发者大会第二弹之未来
  16. 物联网四大支撑网络,物联网发展三个阶段
  17. 为何说买5G手机只能买iPhone,不能买国产5G手机?
  18. 数据结构视频教程 -《(东南大学 王茜)数据结构 (64讲)》
  19. 前端工程师拿30K月薪真的很难吗?
  20. ORM框架——SqlSugar

热门文章

  1. ASP.NET Google Maps Javascript API V3 实战基础篇一检测用户位置
  2. [Java] 蓝桥杯ADV-194 算法提高 盾神与积木游戏
  3. [Java] 蓝桥杯ALGO-30 算法训练 入学考试
  4. L2-001. 紧急救援-PAT团体程序设计天梯赛GPLT(Dijkstra算法)
  5. 蓝桥杯 ADV-134算法提高 校门外的树
  6. mysql主主复制和mha_MySQL第二章主从复制MHA高可用
  7. JAVA ActiveMQ消息发送和接收
  8. flume channel monitor实现源码分析
  9. linux内核分析--异步io(二)
  10. 【效率技巧】利用TI计算器的程序映射功能 kbdprgm1()~9() 简化GTC程序调试操作