【日积月累】Java Lambda 表达式

在这里插入图片描述

目录

【日积月累】Java Lambda 表达式

  • 1.前言
  • 2.语法
  • 3.应用场景
    • 3.1简化匿名内部类的编写
    • 3.1简化匿名内部类的编写
    • 3.2简化集合类中的操作
    • 3.3实现函数式接口
    • 3.4简化多个方法的调用
    • 3.5简化异步编程
  • 4.总结
  • 5.参考


文章所属专区 日积月累


1.前言

Lambda表达式是一个匿名函数,也称闭包,允许把函数作为一个方法的参数,使用它设计的代码会更加简洁。当开发者在编写Lambda表达式时,也会随之被编译成一个函数式接口。

2.语法

Lambda表达式是用箭头(->)定义的,后面跟着一个或多个参数列表和方法体。

(parameters) -> expression

(parameters) ->{ statements; }

parameters是一个或多个参数列表,它们是用圆括号括起来的。参数列表是用逗号分隔的参数名称和类型的列表。方法体是在箭头后面的花括号内定义的代码块。
示例:

int x = 10;
int y = 20;
int sum = (a, b) -> a + b;
System.out.println(sum(x, y)); // 输出30

3.应用场景

3.1简化匿名内部类的编写

未使用前:

// 未使用Lambda表达式简化匿名内部类
public class MyClass {public static void main(String[] args) {new Thread() {@Overridepublic void run() {System.out.println("Hello, world!");}}.start();}
}

使用之后 :

在这里插入代码片

3.1简化匿名内部类的编写

未使用前:

import java.util.ArrayList;
import java.util.List;public class AnonymousInnerClassExample {public static void main(String[] args) {List<Integer> list = new ArrayList<>();list.add(1);list.add(2);list.add(3);for (Integer i : list) {System.out.println(i);}}
}

使用之后:

import java.util.ArrayList;
import java.util.List;public class AnonymousInnerClassExample {public static void main(String[] args) {List<Integer> list = new ArrayList<>();list.add(1);list.add(2);list.add(3);list.forEach(System.out::println);}
}

Lambda表达式中的System.out::println是一个静态方法引用,它表示println()方法的调用。在Lambda表达式中,它被用于打印每个元素。

3.2简化集合类中的操作

public class AnonymousInnerClassExample {public static void main(String[] args) {List<Integer> list = new ArrayList<>();list.add(1);list.add(2);list.add(3);list.forEach(System.out::println);}
}

3.3实现函数式接口

只包含一个抽象方法的接口,就称为函数式接口。
我们可以在任意函数式接口上使用@FunctionalInterface注解,这样做可以用于检测它是否是一个函数式接口,同时javadoc也会包含一条声明,说明这个接口是一个函数式接口。
定义函数式接口:

@FunctionalInterface
public interface MyFuncInterf<T> {public T getValue(String origin);
}

使用函数式接口作为方法参数:

  public String toLowerString(MyFuncInterf<String> mf,String origin){return mf.getValue(origin);}

使用Lambda表达式实现的接口作为参数传递:

 public void test(){String result = toLowerString((str)->{return str.toLowerCase();},"ABC")System.out.println(result);//结果abc}

3.4简化多个方法的调用

使用之后:

public static void main(String[] args) {String result = filter(list -> list.contains("apple"), "banana", "orange");System.out.println(result); // output: ["apple"]
}
public static <T> List<T> filter(Predicate<T> predicate, T... values) {return Arrays.stream(values).filter(predicate).collect(Collectors.toList());
}

3.5简化异步编程

使用之后:

// 使用Lambda表达式简化匿名内部类
public class MyClass {public static void main(String[] args) {Runnable runnable = new Runnable() {@Overridepublic void run() {System.out.println("Hello, world!");}};runnable.run();}
}// 使用Lambda表达式简化集合类中的操作
List<Integer> list = Arrays.asList(1, 2, 3);
list.forEach(i -> System.out.println(i * 2));// 使用Lambda表达式实现函数式接口
Supplier<String> greetingSupplier = () -> "Hello, ";
String greeting = greetingSupplier.get();// 使用Lambda表达式简化多个方法的调用
public void process(List<String> strings) {strings.forEach(string -> process(string));
}// 使用Lambda表达式简化异步编程
ExecutorService executorService = Executors.newFixedThreadPool(3);
Future<String> future1 = executorService.submit(() -> {try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}return "Task 1 completed";
});
Future<String> future2 = executorService.submit(() -> {try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}return "Task 2 completed";
});String result1 = future1.get();
String result2 = future2.get();
System.out.println(result1 + result2);

4.总结

使用Lambda表达式可能会使代码更简洁和易读,但也可能会增加代码的复杂性,特别是在需要处理大量数据时。因此,在使用Lambda表达式和匿名内部类时,我们应该仔细考虑是否有更好的方法来实现我们的需求。

5.参考

Java Lambda 表达式
Lambda表达式超详细总结
lambda表达式详解
给个三连吧 谢谢谢谢谢谢了
在这里插入图片描述

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

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

相关文章

QGIS设计导出Geoserver服务使用的SLD样式

1、打开QGis软件 2、打开shp文件所在所在文件夹&#xff0c;双击添加选中图层 3、编辑shp文件样式 &#xff08;1&#xff09;双击“Layers”中需要编辑的图层 &#xff08;2&#xff09;选择样式 &#xff08;3&#xff09;编辑样式后&#xff0c;选择“应用”—》“确定” 4…

【LeetCode】每日一题 2023_12_31 一年中的第几天(日期)

文章目录 随便聊聊时间题目&#xff1a;一年中的第几天题目描述代码与解题思路 随便聊聊时间 LeetCode&#xff1f;启动&#xff01;&#xff01;&#xff01; 12 月的打卡勋章&#xff0c;get&#xff01; 题目&#xff1a;一年中的第几天 题目链接&#xff1a;1154. 一年中…

Docker安装MySQL(OpenWRT)

参考文章&#xff1a; Docker安装MySQL&#xff08;含open | D-y Blog 第一步、拉取镜像 docker pull mysql:5.7docker pull mysql:latest 安装你的需求去安装版本 第二步、docker代码 docker run -d --name mysql -p 3306:3306 --privilegedtrue -v /usr/local/mysql/lo…

成为一名合格的前端架构师,前端知识技能与项目实战教学

一、教程描述 本套前端架构师教程&#xff0c;大小35.94G&#xff0c;共有672个文件。 二、教程目录 01.node介绍和环境配置&#xff08;共6课时&#xff09; 02.ES6语法&#xff08;共5课时&#xff09; 03.node基础&#xff08;共29课时&#xff09; 04.Express框架&am…

Node.js+Express 获取前端get请求参数值

前端请求&#xff1a; http://localhost:3002/api/user/login?username002&password002 后端响应 router.get(/api/user/login, (req, res) > {let username req.query.username;let password req.query.password;const sqlStr SELECT * FROM sys_user where use…

船舶数据采集与分析在线能源监测解决方案

一、船舶在线能源监测应用前景 船舶在线能源监测在能源效率优化、故障诊断和预测维护、节能减排和环保监管、数据分析和决策支持以及自动化智能化等方面具有广阔的应用前景。随着船舶行业对能源管理和环保要求的不断提高&#xff0c;船舶在线能源监测技术将成为船舶运营和管理中…

不会写好你的年终总结报告,约等于一年白干,老板看了都摇头!

2023 年即将接近尾声&#xff0c;各大公司的“测试媛/猿”们又到了提交年终总结报告的时候了。 每年到这个时候都是抓耳挠腮、冥思苦想的时候&#xff0c;猛然一想&#xff0c;今年跟去年做的事情好像差不多&#xff0c;那么年终总结可以敷衍了事么&#xff1f; 前言 当然是不…

【数据结构】二叉树(一)——树和二叉树的概念及结构

前言: 本篇博客主要了解什么是树&#xff0c;什么是二叉树&#xff0c;以及他们的概念和结构。 文章目录 一、树的概念及结构1.1 树的基本概念1.2 树的相关特征1.3 树的实现 二、二叉树的概念及性质2.1 二叉树的概念2.2 二叉树的性质 一、树的概念及结构 1.1 树的基本概念 树&…

【LeetCode 面试经典150题】42. Trapping Rain Water 接雨水

42. Trapping Rain Water 题目大意 Given n non-negative integers representing an elevation map where the width of each bar is 1, compute how much water it can trap after raining. 中文释义 给定 n 个非负整数&#xff0c;代表以宽度为 1 的条形图的高程图&…

golang并发编程-channel

在golang 并发编程里&#xff0c;经常会听到一句话&#xff1a;不要通过共享内存进行通信&#xff0c;通过通信来共享内存。下面我们会介绍下channel, 通过源码的方式去了解channel是怎么工作的。 基本结构 流程图 代码解读 type hchan struct {qcount uint // …

晓源|算法专栏

文章目录 数据结构1.栈1.1 单调栈1.2括号匹配问题 2.树形结构2.1二叉树2.1.1树形DP 3.动态规划3.1 背包3.2 LIS ERRORheap-buffer-overflow 数据结构 1.栈 1.1 单调栈 单调栈内的元素具有单调性质&#xff0c;要么单调递增&#xff0c;要么单调递减。 1.2括号匹配问题 921…

工作纪实42-内存泄漏(线上问题大乱斗)

还没找到原因&#xff0c;监控里面发现实例的内存使用率每天增加5%&#xff0c;这两天排查一下&#xff0c;mark一下; 下午看了几个小时&#xff0c;泄漏大概率是乌龙事件了&#xff01; 为何我有这样的疑惑&#xff1a; 上线完后面几天内存一直在增加&#xff0c;没有减少&…