Java里面的10个Lambda表达式必须掌握,提高生产力

news2024/10/5 13:26:50

目录

Java里面的10个Lambda表达式必须掌握,提高生产力

前言

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

2. 使用Lambda表达式进行集合过滤

3. 使用Lambda表达式进行集合映射

4. 使用Lambda表达式进行集合排序

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

6. 使用Lambda表达式进行多重条件筛选

7. 使用Lambda表达式进行集合扁平化

8. 使用Lambda表达式进行条件最大值或最小值查找

9. 使用Lambda表达式进行集合元素计数

10. 使用Lambda表达式进行异常处理

结语


Java里面的10个Lambda表达式必须掌握,提高生产力

前言

Lambda表达式是一种在现代编程语言中越来越常见的特性,可以简化代码、提高生产力。这篇文章将介绍10个必须掌握的Lambda表达式,这些表达式涵盖了在实际编程中经常用到的常见场景,例如列表操作、函数组合、条件筛选等。通过学习这些Lambda表达式,你将更加深入地理解函数式编程的思想,能够更加高效地编写代码。

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

未使用Lambda表达式:

List<String> list = Arrays.asList("范闲", "司理理", "林若若");
for (String fruit : list) {
    System.out.println(fruit);
}

传统的for循环遍历集合,虽然直观,但略显冗长。 

使用Lambda表达式:

List<String> list = Arrays.asList("范闲", "司理理", "林若若");
list.forEach(fruit -> System.out.println(fruit));

利用forEach和Lambda表达式,我们可以将遍历和操作合并为一行代码,简洁而高效。

2. 使用Lambda表达式进行集合过滤

未使用Lambda表达式:

List<String> list = Arrays.asList("范闲", "司理理", "林若若");
List<String> filtered = new ArrayList<>();
for (String name : list) {
    if (name.startsWith("司")) {
        filtered.add(name);
    }
}

使用Lambda表达式:

List<String> list = Arrays.asList("范闲", "司理理", "林若若");
List<String> filtered = list.stream()
    .filter(name -> name.startsWith("司"))
    .collect(Collectors.toList());

 通过filter方法和Lambda表达式,我们可以轻松筛选出符合条件的元素。

3. 使用Lambda表达式进行集合映射

未使用Lambda表达式:

List<String> list = Arrays.asList("范闲", "司理理", "林若若");
List<Integer> lengths = new ArrayList<>();
for (String name : list) {
    lengths.add(name.length());
}

使用Lambda表达式:

List<String> list = Arrays.asList("范闲", "司理理", "林若若");
List<Integer> lengths = list.stream()
    .map(name -> name.length())
    .collect(Collectors.toList());

利用map方法和方法引用,我们可以快速转换集合中的每个元素。 

4. 使用Lambda表达式进行集合排序

未使用Lambda表达式:

List<String> list = Arrays.asList("范闲", "司理理", "林若若");
Collections.sort(list, new Comparator<String>() {
    @Override
    public int compare(String s1, String s2) {
        return s1.compareTo(s2);
    }
});

使用Lambda表达式:

List<String> list = Arrays.asList("范闲", "司理理", "林若若");
list.sort(Comparator.naturalOrder());

 Lambda表达式(s1, s2) -> s1.compareTo(s2)简化了排序逻辑的实现。

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

未使用Lambda表达式:

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

使用Lambda表达式:

List<Integer> numbers = Arrays.asList(1, 2, 3, 4);
int sum = numbers.stream()
    .reduce(0, Integer::sum);

或者:
int sum = numbers.stream()
    .reduce(0, (a, b) -> a + b);

Lambda表达式(a, b) -> a + b用于归约操作,计算总和。

6. 使用Lambda表达式进行多重条件筛选

未使用Lambda表达式:

List<String> list = Arrays.asList("范闲", "司理理", "林若若");
List<String> filtered = new ArrayList<>();
for (String name : list) {
    if (name.startsWith("司") && name.length() > 2) {
        filtered.add(name);
    }
}

使用Lambda表达式:

List<String> list = Arrays.asList("范闲", "司理理", "林若若");
List<String> filtered = list.stream()
    .filter(name -> name.startsWith("司") && name.length() > 2)
    .collect(Collectors.toList());

 Lambda表达式中可以包含多重条件,简化了筛选逻辑。

7. 使用Lambda表达式进行集合扁平化

未使用Lambda表达式:

List<List<String>> listOfLists = Arrays.asList(
    Arrays.asList("范闲", "五竹"),
    Arrays.asList("司理理", "林若若")
);
List<String> flatList = new ArrayList<>();
for (List<String> innerList : listOfLists) {
    flatList.addAll(innerList);
}

使用Lambda表达式:

List<List<String>> listOfLists = Arrays.asList(
    Arrays.asList("范闲", "五竹"),
    Arrays.asList("司理理", "林若若")
);
List<String> flatList = listOfLists.stream()
    .flatMap(Collection::stream)
    .collect(Collectors.toList());

Lambda表达式Collection::stream用于将嵌套列表扁平化为单一列表。

8. 使用Lambda表达式进行条件最大值或最小值查找

未使用Lambda表达式:

List<Integer> numbers = Arrays.asList(1, 2, 3, 4);
int max = numbers.get(0);
for (int num : numbers) {
    if (num > max) {
        max = num;
    }
}

使用Lambda表达式:

List<Integer> numbers = Arrays.asList(1, 2, 3, 4);
Optional<Integer> max = numbers.stream()
    .reduce(Integer::max);

利用maxmin方法和Lambda表达式,我们可以轻松找到满足条件的最大或最小值。 

9. 使用Lambda表达式进行集合元素计数

未使用Lambda表达式:

List<String> list = Arrays.asList("范闲", "司理理", "林若若");
int count = 0;
for (String name : list) {
    if (name.startsWith("理")) {
        count++;
    }
}

使用Lambda表达式:

List<String> list = Arrays.asList("范闲", "司理理", "林若若");
long count = list.stream()
    .filter(name -> name.startsWith("理"))
    .count();

通过filtercount方法,我们可以快速统计满足条件的元素数量。 

10. 使用Lambda表达式进行异常处理

未使用Lambda表达式:

List<String> list = Arrays.asList("1", "two", "3");
List<Integer> numbers = new ArrayList<>();
for (String item : list) {
    try {
        numbers.add(Integer.parseInt(item));
    } catch (NumberFormatException e) {
        numbers.add(0); // 或者其他的错误处理
    }
}

使用Lambda表达式:

List<String> list = Arrays.asList("1", "two", "3");
List<Integer> numbers = list.stream()
    .map(item -> {
        try {
            return Integer.parseInt(item);
        } catch (NumberFormatException e) {
            return 0; // 或者其他的错误处理
        }
    })
    .collect(Collectors.toList());

结语

Lambda表达式是现代Java编程中不可或缺的一部分,通过本文的介绍,我们可以看到Lambda表达式如何使我们的代码更加简洁、易读和易于维护。它们不仅简化了代码,更是一种编程思维的转变,让我们能够以更函数式的方式思考问题。掌握Lambda表达式,将使你的代码更加高效、更富表现力。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构与算法题目集(中文)6-2顺序表操作集

题目地址 https://pintia.cn/problem-sets/15/exam/problems/type/6?problemSetProblemId725&page0 注意审题&#xff0c;返回false的时候不要返回ERROR&#xff0c;否则答案错误&#xff0c;机器规则是死的。 位置一般指数组下标&#xff0c;位序一般指数组下标1。但是思…

【传知代码】上下位关系自动检测方法(论文复现)

前言&#xff1a;在信息爆炸的时代&#xff0c;我们每天都沉浸在海量的数据和信息中。随着互联网技术的飞速发展&#xff0c;如何从这些信息中准确、高效地提取出有用的知识&#xff0c;成为了当下研究的热点。其中&#xff0c;上下位关系&#xff08;也称为层级关系或种属关系…

orbslam2代码解读(2):tracking跟踪线程

书接上回&#xff0c;mpTracker->GrabImageMonocular(im,timestamp)函数处理过程&#xff1a; 如果图像是彩色图&#xff0c;就转成灰度图如果当前帧是初始化的帧&#xff0c;那么在构建Frame的时候&#xff0c;提取orb特征点数量为正常的两倍&#xff08;目的就是能够在初…

使用 C# 学习面向对象编程:第 2 部分

C# 类属性简介 属性在面向对象编程中起着至关重要的作用。它们允许我们从类外部访问类的私有变量。在类中使用私有变量是很好的。属性看起来像变量和方法的组合。属性有部分&#xff1a;“get 和 set”方法。get 方法应该返回变量&#xff0c;而 set 方法应该为其赋值。 步骤…

用48个字,总结8条创业心法,悟透将受用一生!

我用48个字&#xff0c;总结8条创业心法&#xff0c;悟透将受用一生。我把这8条创业心法&#xff0c;送给副业微商圈公众号里面的所有朋友们。 希望大家能从中有所启发&#xff0c;脚踏实地&#xff0c;在学习中成长&#xff0c;在前行中坚定。人的烦恼不是源于没有钱&#xf…

【iOS】界面推出的方法

【iOS】界面推出的方法 在学习过程中我们发现在iOS中有两种界面推出的方法&#xff1a;push 和 present这两种方法都可以用来推出一个新的界面 但是这两者是存在区别的 push 方法是通过 UINavigationController 进行导航,新的视图控制器会被压入导航栈中&#xff0c;可以跨级…

BoardLight - hackthebox

简介 靶机名称&#xff1a;BoardLight 难度&#xff1a;简单 靶场地址&#xff1a;https://app.hackthebox.com/machines/603 本地环境 靶机IP &#xff1a;10.10.11.11 ubuntu渗透机IP(ubuntu 22.04)&#xff1a;10.10.16.17 windows渗透机IP&#xff08;windows11&…

springCloudAlibaba之服务熔断组件---sentinel

sentinel组件学习 sentinel学习sentinel容错机制使用代码方式进行QPS流控-流控规则初体验使用SentinelResource注解进行流控 通过代码方式设置降级规则-降级规则初体验sentinel控制台部署客户端整合服务端 springcloud整合sentinelQPS流控规则并发线程数-流控规则BlockExceptio…

wooyun_2015_110216-Elasticsearch-vulfocus

1.原理 ElasticSearch具有备份数据的功能&#xff0c;用户可以传入一个路径&#xff0c;让其将数据备份到该路径下&#xff0c;且文件名和后缀都可控。 所以&#xff0c;如果同文件系统下还跑着其他服务&#xff0c;如Tomcat、PHP等&#xff0c;我们可以利用ElasticSearch的备…

群体优化算法----火山爆发算法介绍以及离散优化Pareto最优解示例

介绍 火山爆发算法&#xff08;Volcano Eruption Algorithm&#xff0c;VEA&#xff09;是一种新兴的群智能优化算法&#xff0c;其灵感来源于火山爆发的自然现象。火山爆发算法模拟了火山爆发过程中熔岩流动和喷发的行为&#xff0c;以寻找全局最优解。这种算法利用了火山爆发…

全网短剧资源

热门短剧资源库&#xff0c;已更新了 9000&#xff0c;记得收藏&#xff1a;https://www.kdocs.cn/l/ciptAICGdWYz

ABB机械人模型下载

可以下载不同格式的 https://new.abb.com/products/robotics/zh/robots/articulated-robots/irb-6700 step的打开各部件是分开的&#xff0c;没有装配在一起&#xff0c;打开看单个零件时&#xff0c;我们会发现其各零件是有装配的定位关系的。 新建一个装配环境&#xff0c;点…

武忠祥17堂课没必要全听,这几个才是精华!

作者&#xff1a;Captain 链接&#xff1a;https://www.zhihu.com/question/381665751/answer/3197724055 来源&#xff1a;知乎 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 17堂课类似于习题课&#xff0c;是专题训练 17堂课省略了…

基于AI大文本模型的智慧对话开发设计及C#源码实现,实现智能文本改写与智慧对话

文章目录 1.AI 大模型发展现状2.基于AI服务的智慧对话开发2.1 大模型API选择2.2 基于C#的聊天界面开发2.3 星火大模型API接入2.4 优化开发界面与显示逻辑 3.源码工程Demo及相关软件下载参考文献 1.AI 大模型发展现状 端午假期几天&#xff0c;关注到国内的AI大模型厂商近乎疯狂…

6.7.29 基于卷积神经网络的乳腺良恶性图像分类

计算机化乳腺癌诊断系统在早期癌症诊断中发挥着重要作用。为此&#xff0c;应用深度学习&#xff0c;利用卷积神经网络 (CNN) 对基于小型乳房 X 线图像分析协会 (mini-MIAS) 数据库的乳房 X 线图像中的异常&#xff08;良性或恶性&#xff09;进行分类。观察准确度、灵敏度和特…

java之基础2笔记

1 类型转换 1.1 自动类型转换&#xff08;隐式类型转换&#xff09; 从小的数据类型到大的数据类型的转换&#xff08;如 int 到 long&#xff09;。 从低精度的数据类型到高精度的数据类型的转换&#xff08;如 float 到 double&#xff09;。 1.2 强制类型转换&#xff0…

逆序队专题

逆序对的定义是&#xff0c;在一个数组中&#xff0c;对于下标 ( i ) 和 ( j )&#xff08;其中 ( i < j )&#xff09;&#xff0c;如果 ( a[i] > a[j] )&#xff0c;则称 ((a[i], a[j])) 为数组的一个逆序对。 换句话说&#xff0c;逆序对就是在数组中前面的元素大于后…

每日十题---三

1. Vue中$nextTick原理 1. 简单的理解就是它就是一个setTimeout函数&#xff0c;将函数放到异步后去处理。 2. Vue 在更新 DOM 时是异步执行的。只要侦听到数据变化&#xff0c;Vue 将开启一个队列&#xff0c;并缓冲在同一事件循环中发生的所有数据变更。如果同一个 watcher 被…

【计算机毕业设计】273基于微信小程序的刷题系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

AI日报0610 -- Prompt这样改,AI成本瞬降20%!

全球首届人工智能选美大赛 世界 AI 创作者大赛和创作者平台 FanVue 正在举办首届“Miss AI”大赛 超过 1,500 名 AI 生成的模特竞逐。这些模型不仅形象逼真 还展示了不同的个性和原因。 评委将评估技术和吸引观众的能力。 奖金池高达 20,000 美元&#xff0c;并有机会参加公关…