Java Lambda表达式:简化编程,提高效率

Java Lambda表达式:简化编程,提高效率

    • 1. 使用Lambda表达式进行集合遍历
      • 1.1 未使用Lambda表达式:
      • 1.2 使用Lambda表达式:
    • 2. 使用Lambda表达式进行排序
      • 2.1 未使用Lambda表达式:
      • 2.2 使用Lambda表达式:
    • 3. 使用Lambda表达式进行过滤
      • 3.1 未使用Lambda表达式:
      • 3.2 使用Lambda表达式:
    • 4. 使用Lambda表达式进行映射
      • 4.1 未使用Lambda表达式:
      • 4.2 使用Lambda表达式:
    • 5. 使用Lambda表达式进行归约
      • 5.1 未使用Lambda表达式:
      • 5.2 使用Lambda表达式:
    • 6. 使用Lambda表达式进行分组
      • 6.1 未使用Lambda表达式:
      • 6.2 使用Lambda表达式:
    • 源码
    • 7. 使用Lambda表达式进行函数式接口的实现
      • 7.1 未使用Lambda表达式:
      • 7.2 使用Lambda表达式:
    • 8. 使用Lambda表达式进行线程的创建
      • 8.1 未使用Lambda表达式:
      • 8.2 使用Lambda表达式:
    • 9. 使用Lambda表达式进行Optional的操作
      • 9.1 未使用Lambda表达式:
      • 9.2 使用Lambda表达式:
    • 10. 使用Lambda表达式进行Stream的流水线操作
      • 10.1 未使用Lambda表达式:
      • 10.2 使用Lambda表达式:

在这里插入图片描述

在这里插入图片描述

博主 默语带您 Go to New World.
个人主页—— 默语 的博客👦🏻
《java 面试题大全》
🍩惟余辈才疏学浅,临摹之作或有不妥之处,还请读者海涵指正。☕🍭
《MYSQL从入门到精通》数据库是开发者必会基础之一~
🪁 吾期望此文有资助于尔,即使粗浅难及深广,亦备添少许微薄之助。苟未尽善尽美,敬请批评指正,以资改进。!💻⌨

理解了,我将添加更多的案例,其中将包括对比使用Lambda表达式和不使用Lambda表达式的情况,以便更全面地展示Lambda表达式的优势。让我们开始扩展这个内容吧:

1. 使用Lambda表达式进行集合遍历

1.1 未使用Lambda表达式:

List<String> list = Arrays.asList("apple", "banana", "orange");
for (String fruit : list) {System.out.println(fruit);
}

1.2 使用Lambda表达式:

List<String> list = Arrays.asList("apple", "banana", "orange");
list.forEach(fruit -> System.out.println(fruit));

Lambda表达式的使用使得集合遍历更为简洁,消除了传统for循环中的冗余代码,提升了代码的可读性和简洁性。

2. 使用Lambda表达式进行排序

2.1 未使用Lambda表达式:

List<String> list = Arrays.asList("apple", "banana", "orange");
Collections.sort(list, new Comparator<String>() {public int compare(String s1, String s2) {return s1.compareTo(s2);}
});

2.2 使用Lambda表达式:

List<String> list = Arrays.asList("apple", "banana", "orange");
Collections.sort(list, (s1, s2) -> s1.compareTo(s2));

Lambda表达式的引入简化了排序操作的代码量,使得代码更加紧凑、易读。

3. 使用Lambda表达式进行过滤

3.1 未使用Lambda表达式:

List<String> list = Arrays.asList("apple", "banana", "orange");
List<String> filteredList = new ArrayList<String>();
for (String fruit : list) {if (fruit.startsWith("a")) {filteredList.add(fruit);}
}

3.2 使用Lambda表达式:

List<String> list = Arrays.asList("apple", "banana", "orange");
List<String> filteredList = list.stream().filter(fruit -> fruit.startsWith("a")).collect(Collectors.toList());

Lambda表达式简化了过滤操作,使得代码更加清晰明了,减少了中间变量的使用。

4. 使用Lambda表达式进行映射

4.1 未使用Lambda表达式:

List<String> list = Arrays.asList("apple", "banana", "orange");
List<Integer> lengths = new ArrayList<Integer>();
for (String fruit : list) {lengths.add(fruit.length());
}

4.2 使用Lambda表达式:

List<String> list = Arrays.asList("apple", "banana", "orange");
List<Integer> lengths = list.stream().map(fruit -> fruit.length()).collect(Collectors.toList());

Lambda表达式使得映射操作更加简洁明了,减少了循环代码的编写。

5. 使用Lambda表达式进行归约

5.1 未使用Lambda表达式:

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
int sum = 0;
for (int i : list) {sum += i;
}

5.2 使用Lambda表达式:

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
int sum = list.stream().reduce(0, (a, b) -> a + b);

Lambda表达式的引入使得归约操作更为简单,减少了冗余的循环代码,提高了代码的可读性和简洁性。

以上是对常见操作的Lambda表达式应用,接下来我们将继续探讨Lambda表达式在其他方面的应用,包括函数式接口的实现、线程创建、Optional的操作以及Stream的流水线操作。

6. 使用Lambda表达式进行分组

6.1 未使用Lambda表达式:

List<String> list = Arrays.asList("apple", "banana", "orange");
Map<Integer, List<String>> grouped = new HashMap<Integer, List<String>>();
for (String fruit : list) {int length = fruit.length();if (!grouped.containsKey(length)) {grouped.put(length, new ArrayList<String>());}grouped.get(length).add(fruit);
}

6.2 使用Lambda表达式:

List<String> list = Arrays.asList("apple", "banana", "orange");
Map<Integer, List<String>> grouped = list.stream().collect(Collectors.groupingBy(String::length));

Lambda表达式使得分组操作更加简洁,通过方法引用或Lambda表达式,能够直接传递业务逻辑,减少了样板代码的编写。

源码

package com.example.java;import java.util.*;
import java.util.stream.Collectors;public class lamdba {public static void main(String[] args) {List<String> list = Arrays.asList("apple", "orange", "banana");//todo---------------------------------------------------//1.集合遍历for (String s : list) {System.out.println("普通编码==》" + s);}list.forEach(s -> System.out.println("Lambda遍历==》" + s));//2.排序// 使用 Collections.sort() 方法对列表 list 进行排序Collections.sort(list, new Comparator<String>() {// 创建匿名内部类实现 Comparator 接口,并重写 compare 方法@Overridepublic int compare(String o1, String o2) {// 比较两个字符串 o1 和 o2 的字典顺序(升序)return o1.compareTo(o2);}});// 输出排序后的列表System.out.println("普通排序:" + list);Collections.sort(list, (s1, s2) -> s1.compareTo(s2));System.out.println("Lambda排序:" + list);//3.过滤// 创建一个新的列表 filteredList,用于存储过滤后的字符串List<String> filteredList = new ArrayList<String>();// 使用增强型 for 循环遍历原始列表 list 中的每个元素for (String s : list) {// 检查当前字符串 s 是否以字母 "a" 开头if (s.startsWith("a")) {// 如果是以 "a" 开头,则将其添加到过滤后的列表 filteredList 中filteredList.add(s);}}// 输出过滤后的列表内容System.out.println("普通过滤:" + filteredList);// 使用流式处理和 Lambda 表达式过滤原始列表 list 中以字母 "b" 开头的字符串List<String> filtered = list.stream().filter(fruit -> fruit.startsWith("b")) // 使用 filter() 方法过滤符合条件的元素.collect(Collectors.toList()); // 将过滤后的结果收集到新的列表中// 输出 Lambda 过滤后的列表内容System.out.println("Lambda过滤:" + filtered);//4.映射List<Integer> lengths = new ArrayList<Integer>();for (String s : list) {lengths.add(s.length());}System.out.println("普通映射:" + lengths);// 使用流式处理将原始列表 list 中的字符串转换为它们的长度,并收集到新的整数列表中List<Integer> length = list.stream()                // 将列表转换为一个流.map(fruit -> fruit.length())   // 使用 map() 方法将每个字符串映射为其长度.collect(Collectors.toList());  // 将映射后的长度收集到一个新的整数列表中System.out.println("Lambda映射:" + lengths);List<Integer> list1 = Arrays.asList(1, 2, 3, 4, 5);//5.归约int sum = 0;for (int i : list1) {sum += i;}System.out.println("普通归约" + sum);// 使用流式处理将列表 list 中的所有元素进行求和操作int sum1 = list1.stream()                   // 将列表转换为一个流.reduce(0, (a, b) -> a + b); // 使用 reduce() 方法对流中的元素进行累加求和,初始值为 0System.out.println("Lambda归约" + sum1);//6.分组// 创建一个 HashMap,用于按字符串长度将列表 list 中的字符串分组Map<Integer, List<String>> grouped = new HashMap<Integer, List<String>>();// 遍历列表 list 中的每个字符串for (String s : list) {// 获取当前字符串 s 的长度int lengths1 = s.length();// 如果 grouped 中不包含当前长度,则添加一个新的列表if (!grouped.containsKey(lengths1)) {grouped.put(lengths1, new ArrayList<String>());}// 将当前字符串 s 加入到对应长度的列表中grouped.get(lengths1).add(s);}// 输出普通分组结果System.out.println("普通分组:" + grouped);// 使用流式处理将列表 list 中的字符串按照它们的长度进行分组,并收集到一个新的 Map 中Map<Integer, List<String>> groupeds = list.stream()   // 将列表转换为一个流.collect(Collectors.groupingBy(fruit -> fruit.length())); // 使用 groupingBy() 方法按字符串长度进行分组System.out.println("Lambda分组:" + groupeds);}
}

执行结果

普通编码==》apple
普通编码==》orange
普通编码==》banana
Lambda遍历==》apple
Lambda遍历==》orange
Lambda遍历==》banana
普通排序:[apple, banana, orange]
Lambda排序:[apple, banana, orange]
普通过滤:[apple]
Lambda过滤:[banana]
普通映射:[5, 6, 6]
Lambda映射:[5, 6, 6]
普通归约15
Lambda归约15
普通分组:{5=[apple], 6=[banana, orange]}
Lambda分组:{5=[apple], 6=[banana, orange]}

7. 使用Lambda表达式进行函数式接口的实现

7.1 未使用Lambda表达式:

public interface MyInterface {public void doSomething(String input);
}MyInterface myObject = new MyInterface() {public void doSomething(String input) {System.out.println(input);}
};
myObject.doSomething("Hello World");

7.2 使用Lambda表达式:

MyInterface myObject = input -> System.out.println(input);
myObject.doSomething("Hello World");

Lambda表达式使得函数式接口的实现更加简洁,通过箭头操作符直接定义了函数的行为,减少了接口实现类的创建。

8. 使用Lambda表达式进行线程的创建

8.1 未使用Lambda表达式:

Thread thread = new Thread(new Runnable() {public void run() {System.out.println("Thread is running.");}
});
thread.start();

8.2 使用Lambda表达式:

Thread thread = new Thread(() -> System.out.println("Thread is running."));
thread.start();

Lambda表达式简化了线程的创建过程,使得代码更为紧凑、易读。

9. 使用Lambda表达式进行Optional的操作

9.1 未使用Lambda表达式:

String str = "Hello World";
if (str != null) {System.out.println(str.toUpperCase());
}

9.2 使用Lambda表达式:

Optional<String> str = Optional.ofNullable("Hello World");
str.map(String::toUpperCase).ifPresent(System.out::println);

Lambda表达式使得对Optional对象的操作更加直观,通过链式调用的方式简化了代码的编写。

10. 使用Lambda表达式进行Stream的流水线操作

10.1 未使用Lambda表达式:

List<String> list = Arrays.asList("apple", "banana", "orange");
List<String> filteredList = new ArrayList<String>();
for (String fruit : list) {if (fruit.startsWith("a")) {filteredList.add(fruit.toUpperCase());}
}
Collections.sort(filteredList);

10.2 使用Lambda表达式:

List<String> list = Arrays.asList("apple", "banana", "orange");
List<String> filteredList = list.stream().filter(fruit -> fruit.startsWith("a")).map(String::toUpperCase).sorted().collect(Collectors.toList());

Lambda表达式简化了Stream流水线操作的代码,使得代码更为清晰、易读。

通过以上对比,我们可以清晰地看到Lambda表达式相比传统方式的优势,它使得代码更为简洁、可读,提高了编程效率。

🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬请批评指正!🍁🐥

如对本文内容有任何疑问、建议或意见,请联系作者,作者将尽力回复并改进📓;(联系微信:Solitudemind )

点击下方名片,加入IT技术核心学习团队。一起探索科技的未来,共同成长。

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

市场复盘总结 20240208

仅用于记录当天的市场情况&#xff0c;用于统计交易策略的适用情况&#xff0c;以便程序回测 短线核心&#xff1a;不参与任何级别的调整&#xff0c;采用龙空龙模式 一支股票 10%的时候可以操作&#xff0c; 90%的时间适合空仓等待 二进三&#xff1a; 进级率中 25% 最常用的…

Practical User Research for Enterprise UX

2.1 Why It’s Hard to Get Support for Research in Enterprises 2.1.1 Time and Budget Instead of answering the question “What dowe gain if we do this research?”, ask instead “What do we stand to lose if we don’t do the research?” 2.1.2 Legacy Thinkin…

Mysql第二关之存储引擎

简介 所有关于Mysql数据库优化的介绍仿佛都有存储引擎的身影。本文介绍Mysql常用的有MyISAM存储引擎和Innodb存储引擎&#xff0c;还有常见的索引。 Mysql有两种常见的存储引擎&#xff0c;MyISAM和Innodb&#xff0c;它们各有优劣&#xff0c;经过多次优化和迭代&#xff0c;…

数据结构对链表的初步认识(一)

已经两天没有更新了&#xff0c;今天就写一篇数据结构的链表吧&#xff0c;巩固自己也传授知识&#xff0c;不知道各位是否感兴趣看看这一篇有关联表的文章。 目录 链表的概念与结构 单向链表的实现 链表各个功能函数 首先我在一周前发布了一篇有关顺序表的文章&#xff0c;…

漏洞原理 | CORS跨域学习篇

本文由掌控安全学院 - 帆先生 投稿 0x01&#xff1a;原理 1、 什么是CORS 全称跨域资源共享&#xff0c;用来绕过SOP(同源策略)来实现跨域访问的一种技术。 CORS漏洞利用CORS技术窃取用户敏感信息 2、 同源策略简介 同源策略是浏览器最核心也是最基本的安全功能&#xff0…

Netty中的内置通信模式、Bootstrap和ChannelInitializer

内置通信传输模式 NIO:io.netty.channel.socket.nio 使用java.nio.channels包作为基础–基于选择器的方式Epoll:io.netty.channel.epoll由JNI驱动的epoll()和非阻塞IO.这个传输支持只有在Linux上可用的多种特性&#xff0c;如果SO_REUSEPORT&#xff0c;比NIO传输更快&#xf…

layui表格中使用cascader后导致表格滚动条消失

修改前&#xff0c;受影响页面 修改后最终想要的效果 修改方法

TIM编码器接口(编码器测速)

定时器编码器接口自动计次--------->对应手册14.3.12编码器接口模式 应用场景&#xff1a; 电机控制PWM驱动电机&#xff0c;编码器测电机速度&#xff0c;PID算法闭环控制 ------------------------------------------------------------------------------------------…

Java IO详解

一、流的概念与作用 流(Stream)&#xff1a; 在Java IO中&#xff0c;流是一个核心的概念。流从概念上来说是一个连续的数据传输过程。人们根据数据传输特性将流抽象为各种类&#xff0c;方便更直观的进行数据操作。你既可以从流中读取数据&#xff0c;也可以往流中写数据。流的…

计算机毕业设计SSM基于的高校学习资源共享系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; vue mybatis Maven mysql5.7或8.0等等组成&#xff0c;B…

Camtasia2023破解版下载

Camtasia2023破解版是一款简单好用的屏幕录像软件&#xff0c;它结屏幕录制和录制视频编辑等功能于一身&#xff0c;不管是用来创建视频教程还是相关教学视频或者操作演示等都是不二的选择&#xff0c;软件支持录制全屏或者部分区域进行选择录制&#xff0c;可录制网络摄像头、…

DTAN: Diffusion-based Text Attention Network for medical imagesegmentation

DTAN:基于扩散的医学图像分割文本关注网络 摘要 在当今时代&#xff0c;扩散模型已经成为医学图像分割领域的一股开创性力量。在此背景下&#xff0c;我们引入了弥散文本注意网络(Diffusion text - attention Network, DTAN)&#xff0c;这是一个开创性的分割框架&#xff0c…