通俗易懂的15个Java Lambda表达式案例

文章目录

    • 1. **实现Runnable接口**:
    • 2. **事件监听器**(如Swing中的ActionListener):
    • 3. **集合遍历**(使用`forEach`方法):
    • 4. **过滤集合**(使用Stream API):
    • 5. **映射集合元素**:
    • 6. **排序集合**:
    • 7. **函数引用作为lambda**:
    • 8. **使用Consumer接口**:
    • 9. **Predicate接口的应用**:
    • 10. **使用Supplier接口**:
    • 11. **使用Function接口**:
    • 12. **并行流处理**:
    • 13. **Optional类的map和filter方法**:
    • 14. **比较器构造**(Comparator.comparing()):
    • 15. **方法引用作为lambda的返回值**:

当然,以下是Java Lambda表达式的10个典型使用案例:

1. 实现Runnable接口

// 在Java 8之前,我们这样写:
new Thread(new Runnable() {@Overridepublic void run() {System.out.println("Hello from a thread");}
}).start();// 使用lambda简化后:
new Thread(() -> System.out.println("Hello from a thread")).start();

2. 事件监听器(如Swing中的ActionListener):

// 传统匿名类方式:
button.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {System.out.println("Button clicked");}
});// 使用lambda表达式:
button.addActionListener(e -> System.out.println("Button clicked"));

3. 集合遍历(使用forEach方法):

List<String> names = Arrays.asList("Alice", "Bob", "Charlie");// 非lambda方式:
for (String name : names) {System.out.println(name);
}// 使用lambda表达式:
names.forEach(name -> System.out.println(name));

4. 过滤集合(使用Stream API):

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6);List<Integer> evenNumbers = numbers.stream().filter(n -> n % 2 == 0).collect(Collectors.toList());

5. 映射集合元素

List<String> words = Arrays.asList("apple", "banana", "cherry");List<Integer> wordLengths = words.stream().map(String::length).collect(Collectors.toList());

6. 排序集合

List<Person> people = ...; // 假设Person有getName()方法Collections.sort(people, (p1, p2) -> p1.getName().compareTo(p2.getName()));// 或者使用Stream API
List<Person> sortedPeople = people.stream().sorted(Comparator.comparing(Person::getName)).collect(Collectors.toList());

7. 函数引用作为lambda

List<String> list = Arrays.asList("a", "aa", "aaa");
list.sort((s1, s2) -> s1.length() - s2.length()); // 使用lambda进行长度比较排序
list.sort(Comparator.comparing(String::length)); // 使用函数引用简化

8. 使用Consumer接口

BiConsumer<String, String> printer = (x, y) -> System.out.println(x + ", " + y);
printer.accept("Hello", "World");

9. Predicate接口的应用

Predicate<String> isLongEnough = s -> s.length() > 5;
boolean result = isLongEnough.test("longEnoughString");

10. 使用Supplier接口

```java
Supplier<String> randomNameGenerator = () -> "Random Name " + Math.random();
String newName = randomNameGenerator.get();
```

11. 使用Function接口

```java
Function<String, Integer> stringLength = s -> s.length();
int length = stringLength.apply("Hello World");
```

12. 并行流处理

```java
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = numbers.parallelStream().mapToInt(i -> i * i).sum();
```

13. Optional类的map和filter方法

```java
Optional<String> optional = Optional.of("Hello");
String upperCased = optional.map(s -> s.toUpperCase()).orElse("default");
```

14. 比较器构造(Comparator.comparing()):

```java
List<Student> students = ...; // 假设Student有getScore()方法
Collections.sort(students, Comparator.comparing(Student::getScore).reversed());
```

15. 方法引用作为lambda的返回值

```java
BiFunction<String, String, String> concat = String::concat;
String result = concat.apply("Hello", "World"); // 输出: HelloWorld
```

以上示例进一步展示了Java Lambda在函数式编程、集合操作以及处理Optional对象等场景中的应用。

python学习汇总连接:
50个开发必备的Python经典脚本(1-10)

50个开发必备的Python经典脚本(11-20)

50个开发必备的Python经典脚本(21-30)

50个开发必备的Python经典脚本(31-40)

50个开发必备的Python经典脚本(41-50)
————————————————

​最后我们放松一下眼睛
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/232967.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MATLAB基本绘图操作(二维和三维绘图)

MATLAB基本绘图操作 文章目录 MATLAB基本绘图操作1、二维平面绘图1.1、线条&#xff08;折线图&#xff09;1.2、条形图1.3、极坐标图1.4、散点图 2、三维立体绘图2.1、三维曲面图2.2、三维曲线图&#xff08;点图&#xff09; 3、图片分区&#xff08;子图&#xff09; 1、二维…

2024最新最全【CTF攻防夺旗赛教程】,零基础入门到精通

对于想学习或者参加CTF比赛的朋友来说&#xff0c;CTF工具、练习靶场必不可少&#xff0c;今天给大家分享自己收藏的CTF资源&#xff0c;希望能对各位有所帮助。 CTF在线工具 首先给大家推荐我自己常用的3个CTF在线工具网站&#xff0c;内容齐全&#xff0c;收藏备用。 1、C…

(适趣AI)Vue笔试题

&#x1f4d1;前言 本文主要是【Vue】——&#xff08;适趣AI&#xff09;Vue笔试题的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 …

Java 堆的设计,如何用堆进行排序

Java 学习面试指南&#xff1a;https://javaxiaobear.cn 1、堆的定义 堆是计算机科学中一类特殊的数据结构的统称&#xff0c;堆通常可以被看做是一棵完全二叉树的数组对象。 1、堆的特性 它是完全二叉树&#xff0c;除了树的最后一层结点不需要是满的&#xff0c;其它的每一层…

Spring之代理模式

1、概念 1.1 介绍 二十三种设计模式中的一种&#xff0c;属于结构型模式。它的作用就是通过提供一个代理类&#xff0c;让我们在调用目标方法的时候&#xff0c;不再是直接对目标方法进行调用&#xff0c;而是通过代理类间接调用。让不属于目标方法核心逻辑的代码从目标方法中…

Python 面向对象之反射

Python 面向对象之反射 【一】概念 反射是指通过对象的属性名或者方法名来获取对象的属性或调用方法的能力反射还指的是在程序额运行过程中可以动态获取对象的信息(属性和方法) 【二】四个内置函数 又叫做反射函数 万物皆对象&#xff08;整数、字符串、函数、模块、类等等…

后端开发——JDBC的学习(三)

本篇继续对JDBC进行总结&#xff1a; ①通过Service层与Dao层实现转账的练习&#xff1b; ②重点&#xff1a;由于每次使用连接就手动创建连接&#xff0c;用完后就销毁&#xff0c;这样会导致资源浪费&#xff0c;因此引入连接池&#xff0c;练习连接池的使用&#xff1b; …

霍兰德职业兴趣测试 60题(免费版)

霍兰德职业兴趣理论从兴趣的角度出发探索职业指导的问题&#xff0c;明确了职业兴趣的人格观念&#xff0c;使得人们对于职业兴趣的认识有了质的变化。在霍兰德职业兴趣理论提出来之前&#xff0c;职业兴趣和职业环境二者分别独立存在&#xff0c;正是霍兰德的总结&#xff0c;…

阿里云服务器8080端口怎么打开?在安全组中设置

阿里云服务器8080端口开放在安全组中放行&#xff0c;Tomcat默认使用8080端口&#xff0c;8080端口也用于www代理服务&#xff0c;阿腾云atengyun.com以8080端口为例来详细说下阿里云服务器8080端口开启教程教程&#xff1a; 阿里云服务器8080端口开启教程 阿里云服务器8080端…

[通俗易懂]c语言中指针变量和数值之间的关系

一、指针变量的定义 在C语言中&#xff0c;指针变量是一种特殊类型的变量&#xff0c;它存储的是另一个变量的内存地址。指针变量可以用来间接访问和操作内存中的其他变量。指针变量的定义如下&#xff1a; 数据类型 *指针变量名&#xff1b;其中&#xff0c;数据类型可以是任…

jenkins安装报错:No such plugin: cloudbees-folder

jenkins安装报错&#xff1a;No such plugin: cloudbees-folder 原因是缺少cloudbees-folder.hpi插件 解决&#xff1a; 一&#xff0c;重新启动 http://xxx:8800/restart 二&#xff0c;跳到重启界面时&#xff0c;点击系统设置 三&#xff0c;找到安装插件&#xff0c;然…

Python双端队列的3种实现及应用

概述 双端队列&#xff08;deque&#xff0c;全名double-ended queue&#xff09;是一种具有队列和栈性质的线性数据结构。双端队列也拥有两端&#xff1a;队首&#xff08;front&#xff09;、队尾&#xff08;rear&#xff09;&#xff0c;但与队列不同的是&#xff0c;插入…

【pytorch学习】 深度学习 教程 and 实战

pytorch编程实战博主&#xff1a;https://github.com/lucidrains https://github.com/lucidrains/vit-pytorch

从0到1入门C++编程——04 类和对象之封装、构造函数、析构函数、this指针、友元

文章目录 一、封装二、项目文件拆分三、构造函数和析构函数1.构造函数的分类及调用2.拷贝函数调用时机3.构造函数调用规则4.深拷贝与浅拷贝5.初始化列表6.类对象作为类成员7.静态成员 四、C对象模型和this指针1.类的对象大小计算2.this指针3.空指针访问成员函数4.const修饰成员…

C#,入门教程(08)——基本数据类型及使用的基础知识

上一篇&#xff1a; C#&#xff0c;入门教程(07)——软件项目的源文件与目录结构https://blog.csdn.net/beijinghorn/article/details/124139947 数据类型用于指定数据体&#xff08;DataEntity&#xff0c;包括但不限于类或结构体的属性、变量、常量、函数返回值&#xff09;…

16、Kubernetes核心技术 - 节点选择器、亲和和反亲和

目录 一、概述 二、节点名称 - nodeName 二、节点选择器 - nodeSelector 三、节点亲和性和反亲和性 3.1、亲和性和反亲和性 3.2、节点硬亲和性 3.3、节点软亲和性 3.4、节点反亲和性 3.5、注意点 四、Pod亲和性和反亲和性 4.1、亲和性和反亲和性 4.2、Pod亲和性/反…

stable diffusion 进阶教程-controlnet详解(持续更新中)

说明 插件下载链接:https://pan.baidu.com/s/1-qmJzqcB72nTv_2QLmR-gA?pwd=8888 提取码: 8888 讨论Q群:830970289 个人微信:mindcarver 如果在按着教程尝试的过程中有错误或问题,可以上面询问讨论,或者评论区留言 如果教程有什么问题,请帮忙纠正,持续更新(部分控制插件…

Android开发编程从入门到精通,安卓技术从初级到高级全套教学

一、教程描述 本套教程基于JDK1.8版本&#xff0c;教学内容主要有&#xff0c;1、环境搭建&#xff0c;UI布局&#xff0c;基础UI组件&#xff0c;高级UI组件&#xff0c;通知&#xff0c;自定义组件&#xff0c;样式主题&#xff1b;2、四大组件&#xff0c;Intent&#xff0…

数据库的连接

连接数据库 我们使用WinR输入cmd打开运行窗口 输入:sqlplus并回车 输入用户名和密码,我用的是Scott,密码我自己设置的123456,Scott默认的密码是tiger,回车 这种情况表示登录成功 在连接Scott成功的情况下创建一些数据,在我的资源里面有个Oracle数据基础可以下载,直接复制粘…

详解Java中的原子操作

第1章&#xff1a;什么是原子操作 大家好&#xff0c;我是小黑&#xff0c;面试中一个经常被提起的话题就是“原子操作”。那么&#xff0c;到底什么是原子操作呢&#xff1f;在编程里&#xff0c;当咱们谈论“原子操作”时&#xff0c;其实是指那些在执行过程中不会被线程调度…