当前位置: 首页 > news >正文

Java零基础-集合:Java 8新增的集合操作

哈喽,各位小伙伴们,你们好呀,我是喵手。

  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。

  我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把自己所学到所会的,通过文章的形式进行输出,希望以这种方式帮助到更多的初学者或者想入门的小伙伴们,同时也能对自己的技术进行沉淀,加以复盘,查缺补漏。

小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对作者我写作道路上最好的鼓励与支持!

前言

Java是一种广泛应用于软件开发领域的高级编程语言,具有可移植性和跨平台的特性。在Java的发展过程中,不断有新的功能和语法特性引入,以便开发者能够更加方便和高效地编写代码。其中,在Java 8中引入了许多强大的集合操作,本文将重点介绍这些新增的集合操作。

摘要

Java 8新增的集合操作为开发人员提供了一种更简单,更灵活的方式来处理集合。这些新的操作包括流(Stream)、过滤器(Filter)、映射(Map)和归约(Reduce),它们可以大大简化编写和理解集合处理代码的过程。

简介

在Java 8之前,对集合进行操作通常需要使用循环或者迭代器来遍历集合元素,操作繁琐并且容易出错。而Java 8中引入的新的集合操作则提供了一种更加简洁和直观的处理方式。

源代码解析

流(Stream)

流是Java 8中引入的一种新的抽象,它可以作为集合的替代方式。通过使用流,我们可以更加方便地进行集合的操作和处理。

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = numbers.stream().filter(n -> n % 2 == 0).mapToInt(n -> n * 2).sum();
System.out.println(sum); // 输出:24

上述代码使用了流的链式调用,首先通过filter方法筛选出偶数,然后使用mapToInt方法将每个数乘以2,最后使用sum方法求和。

过滤器(Filter)

过滤器是一种用于筛选集合中元素的操作。我们可以使用过滤器来根据指定的条件过滤集合中的元素。

List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");
List<String> filteredNames = names.stream().filter(name -> name.startsWith("A")).collect(Collectors.toList());
System.out.println(filteredNames); // 输出:[Alice]

上述代码使用过滤器筛选出以字母"A"开头的名字,并将结果收集到一个新的列表中。

映射(Map)

映射是一种将集合中的元素进行转换或者提取的操作。我们可以使用映射操作将集合中的元素映射为新的值。

List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");
List<Integer> nameLengths = names.stream().map(name -> name.length()).collect(Collectors.toList());
System.out.println(nameLengths); // 输出:[5, 3, 7, 5]

上述代码使用映射操作将集合中每个名字的长度提取出来,并将结果收集到一个新的列表中。

归约(Reduce)

归约是一种将集合中的元素进行合并计算的操作。我们可以使用归约操作对集合中的元素进行求和、求平均值等操作。

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = numbers.stream().reduce(0, (a, b) -> a + b);
System.out.println(sum); // 输出:15

上述代码使用归约操作对集合中的元素求和,初始值设为0,然后使用lambda表达式将两个数相加。

应用场景案例

Java 8新增的集合操作在实际开发中有许多应用场景。以下是一些示例:

  1. 数据过滤:筛选出满足特定条件的数据。
  2. 数据转换:将集合中的元素转换为不同的类型或者格式。
  3. 数据统计:对集合中的数据进行求和、求平均值等操作。
  4. 数据分组:将集合中的元素按照某个属性进行分组。

优缺点分析

Java 8新增的集合操作具有以下优点:

  • 简化代码:使用流式操作可以减少代码量,提高代码的可读性。
  • 提高效率:流式操作可以利用多核处理器,提高代码的执行效率。
  • 增加灵活性:流式操作提供了丰富的操作方法,使得开发者能够更灵活地处理集合数据。

然而,Java 8新增的集合操作也存在一些缺点:

  • 学习成本高:对于初学者来说,掌握流式操作的概念和使用方式可能需要一定的学习成本。
  • 可读性降低:复杂的流式操作可能会降低代码的可读性,使得代码难以理解和维护。

类代码方法介绍

public class CollectionUtils {public static List<String> filterNames(List<String> names) {return names.stream().filter(name -> name.length() > 5).collect(Collectors.toList());}public static List<Integer> mapNumbers(List<Integer> numbers) {return numbers.stream().map(number -> number * 2).collect(Collectors.toList());}public static int sumNumbers(List<Integer> numbers) {return numbers.stream().reduce(0, (a, b) -> a + b);}public static List<String> groupNamesByFirstLetter(List<String> names, String letter) {return names.stream().filter(name -> name.startsWith(letter)).collect(Collectors.toList());}
}

上述代码是一个包含了一些常用集合操作方法的工具类。filterNames方法使用过滤器筛选出名字长度大于5的元素;mapNumbers方法使用映射操作将集合中的每个数乘以2;sumNumbers方法使用归约操作对集合中的数求和;groupNamesByFirstLetter方法使用过滤器筛选出以指定字母开头的名字。

Java代码测试用例

public class CollectionUtilsTest {@Testpublic void testFilterNames() {List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");List<String> filteredNames = CollectionUtils.filterNames(names);List<String> expected = Arrays.asList("Charlie");assertEquals(expected, filteredNames);}@Testpublic void testMapNumbers() {List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);List<Integer> mappedNumbers = CollectionUtils.mapNumbers(numbers);List<Integer> expected = Arrays.asList(2, 4, 6, 8, 10);assertEquals(expected, mappedNumbers);}@Testpublic void testSumNumbers() {List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);int sum = CollectionUtils.sumNumbers(numbers);assertEquals(15, sum);}@Testpublic void testGroupNamesByFirstLetter() {List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");List<String> groupedNames = CollectionUtils.groupNamesByFirstLetter(names, "A");List<String> expected = Arrays.asList("Alice");assertEquals(expected, groupedNames);}
}

上述代码是对集合操作方法的测试用例。使用JUnit框架进行断言,确保集合操作方法的正确性。

全文小结

本文介绍了Java 8新增的集合操作,包括流、过滤器、映射和归约。通过使用这些新的集合操作,我们可以更加方便和高效地处理集合中的元素。同时,本文还给出了一些应用场景案例以及优缺点,让大家能够避开这些坑。

… …

文末

好啦,以上就是我这期的全部内容,如果有任何疑问,欢迎下方留言哦,咱们下期见。

… …

学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!

wished for you successed !!!


⭐️若喜欢我,就请关注我叭。

⭐️若对您有用,就请点赞叭。

⭐️若有疑问,就请评论留言告诉我叭。

相关文章:

Java零基础-集合:Java 8新增的集合操作

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一个人虽可以走的更快&#xff0c;但一群人可以走的更远。 我是一名后…...

C++经典面试题目(七)

1、什么是引用&#xff1f;请解释引用的概念和用法。 当谈论引用时&#xff0c;指的是在 C 中的一种类型。引用提供了对变量的别名&#xff0c;它允许通过不同的名称访问同一个变量。引用在 C 中常用于函数参数传递、返回值传递和操作符重载等场景。 引用的概念和用法&#x…...

让手机平板成为AI开发利器:AidLux

想ssh登录自己的手机吗&#xff1f; 想在手机上自由的安装lynx、python、vscode、jupyter甚至飞桨PaddlePaddle、Tensorflow、Pytorch和昇思Mindspore吗&#xff1f; 那么看这里....装上AidLux&#xff0c;以上全都有&#xff01; AidLux是一个综合的AI开发平台&#xff0c;…...

Python物理学有限差分微分求解器和动画波形传播

&#x1f3af;要点 Python数值和符号计算&#xff1a; 振动常微分方程&#xff1a;&#x1f3af;中心差分求解器&#xff0c;绘制移动窗口研究长时间序列。&#x1f3af;符号计算离散方程量化误差。&#x1f3af;Python数值对比正向欧拉方法&#xff0c;反向欧拉方法&#xf…...

游戏本续航@控制中心的省电模式效果如何

文章目录 节能模式长续航模式&#x1f47a;相关工具 节能模式长续航模式&#x1f47a; 蓝天模具Control Center中的模式 根据我的试验,以及软件的提示,可以发现 Power Saving是最省电的,儿Quiet模式并不省电,它会启用独立显卡,只不过风扇的转速不像娱乐模式和性能模式那么积极而…...

centOS 安装MySQL8.0

1.配置yum仓库 rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022 2.安装MySQL8.x版本 yum库 rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-2.noarch.rpm 或者 wget https://dev.mysql.com/get/mysql80-community-release-el7-2.noarch…...

力扣 1.两数之和

给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回…...

Occupancy field----其他应用

文章目录 3D表示技术的概述&#xff1a;Signed Distance Function (SDF)Occupancy Field (占用场)神经辐射场&#xff08;NeRF&#xff09; Occupancy Networks 是一种基于Occupancy表示的可微分模型&#xff0c;它在与其他3D表示技术&#xff08;例如点云、体素和三角面片&…...

Spring_MVC

web.xml配置文件 <?xml version"1.0" encoding"UTF-8"?> <web-app xmlns"http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://xmlns.jcp.org/xml…...

【动手学深度学习】深入浅出深度学习之线性神经网络

目录 &#x1f31e;一、实验目的 &#x1f31e;二、实验准备 &#x1f31e;三、实验内容 &#x1f33c;1. 线性回归 &#x1f33b;1.1 矢量化加速 &#x1f33b;1.2 正态分布与平方损失 &#x1f33c;2. 线性回归的从零开始实现 &#x1f33b;2.1. 生成数据集 &#x…...

2024/3/26 C++作业

定义一个矩形类&#xff08;Rectangle&#xff09;&#xff0c;包含私有成员&#xff1a;长(length)、宽&#xff08;width&#xff09;, 定义成员函数&#xff1a; 设置长度&#xff1a;void set_l(int l) 设置宽度&#xff1a;void set_w(int w) 获取长度&#xff1a;int…...

LinkedList讲解指南

咦咦咦&#xff0c;各位小可爱&#xff0c;我是你们的好伙伴——bug菌&#xff0c;今天又来给大家普及Java SE相关知识点了&#xff0c;别躲起来啊&#xff0c;听我讲干货还不快点赞&#xff0c;赞多了我就有动力讲得更嗨啦&#xff01;所以呀&#xff0c;养成先点赞后阅读的好…...

IP如何异地共享文件?

【天联】 组网由于操作简单、跨平台应用、无网络要求、独创的安全加速方案等原因&#xff0c;被几十万用户广泛应用&#xff0c;解决了各行业客户的远程连接需求。采用穿透技术&#xff0c;简单易用&#xff0c;不需要在硬件设备中端口映射即可实现远程访问。 异地共享文件 在…...

HCIA-Datacom H12-811 题库补充(3/28)

完整题库及答案解析&#xff0c;请直接扫描上方二维码&#xff0c;持续更新中 OSPFv3使用哪个区域号标识骨干区域&#xff1f; A&#xff1a;0 B&#xff1a;3 C&#xff1a;1 D&#xff1a;2 答案&#xff1a;A 解析&#xff1a;AREA 号0就是骨干区域。 STP下游设备通知上游…...

轻量级富文本编辑 Trumbowyg —— 基于 jQuery 插件配置

使用方法&#x1f447; 首先,添加jQuery到页面<body>位置: <script src"http://libs.baidu.com/jquery/1.8.3/jquery.min.js"></script> <script>window.jQuery || document.write(<script src"js/vendor/jquery-1.10.2.min.js&qu…...

那些王道书里的题目-----计算机网络篇

注&#xff1a;仅记录个人认为有启发的题目 p155 34.下列四个地址块中&#xff0c;与地址块 172.16.166.192/26 不重叠&#xff0c;且与172.16.166.192/26聚合后的地址块不会引入多余地址的是&#xff08;&#xff09; A.172.16.166.192/27 B.172.16.166.128/26 …...

【前端学习——js篇】 10.this指向

具体见&#xff1a;https://github.com/febobo/web-interview 10.this指向 根据不同的使用场合&#xff0c;this有不同的值&#xff0c;主要分为下面几种情况&#xff1a; 默认绑定隐式绑定new绑定显示绑定 ①默认绑定 全局环境中定义person函数&#xff0c;内部使用this关…...

项目搭建之统一返回值

自定义枚举类 Getter public enum ReturnCodeEnum {/*** 操作失败**/RC999("999","操作XXX失败"),/*** 操作成功**/RC200("200","success"),/*** 服务降级**/RC201("201","服务开启降级保护,请稍后再试!"),/*** …...

嵌入式和 Java 走哪条路?

最近看到一个物联网大三学生的疑问&#xff0c;原话如下&#xff1a; 本人普通本科物联网工程专业&#xff0c;开学大三&#xff0c;现在就很迷茫&#xff0c;不打算考研了&#xff0c;准备直接就业&#xff0c;平时一直在实验室参加飞思卡尔智能车比赛&#xff0c;本来是想走嵌…...

C++ 控制语句(一)

一 顺序结构 程序的基本结构有三种&#xff1a; 顺序结构、分支结构、循环结构 大量的实际问题需要通过各种控制流程来解决。 1.1 顺序结构 1.2 简单语句和复合语句 二 循环 2.1 for循环 语句流程图 注意&#xff1a;使用for语句的灵活性 三 while语句 四 do while语句...

Chandra AI在教育领域的应用:智能学习助手开发

Chandra AI在教育领域的应用&#xff1a;智能学习助手开发 1. 引言 想象一下这样的场景&#xff1a;一个学生在深夜复习功课&#xff0c;遇到一道数学难题却找不到老师请教&#xff1b;一个上班族想学习新技能&#xff0c;但时间碎片化难以系统学习&#xff1b;一个老师面对几…...

Voyager复杂导航模式实现:底部导航、标签页和嵌套导航实战

Voyager复杂导航模式实现&#xff1a;底部导航、标签页和嵌套导航实战 【免费下载链接】voyager &#x1f6f8; A pragmatic navigation library for Jetpack Compose 项目地址: https://gitcode.com/gh_mirrors/voyag/voyager Voyager是一个专为Jetpack Compose设计的实…...

单片机调试:问题复现与定位的实战技巧

1. 单片机开发中的问题复现方法论在单片机项目开发过程中&#xff0c;遇到问题是不可避免的。作为一名从业多年的嵌入式工程师&#xff0c;我认为问题复现是整个调试过程中最关键的第一步。很多新手开发者常常急于解决问题&#xff0c;却忽略了问题复现的重要性&#xff0c;结果…...

ClawdBot代码实例:修改clawdbot.json实现模型热切换实操

ClawdBot代码实例&#xff1a;修改clawdbot.json实现模型热切换实操 1. 引言&#xff1a;你的个人AI助手&#xff0c;想换模型就换模型 想象一下&#xff0c;你有一个24小时在线的AI助手&#xff0c;它能帮你写代码、回答问题、整理文档。但用久了&#xff0c;你可能会想&…...

OpenClaw人人养虾:配置Anthropic (Claude)

Anthropic 是 Claude 系列模型的开发者。Claude 以出色的指令遵循能力、深度推理和长文本处理著称。OpenClaw 支持通过 API Key 或 Claude Code CLI OAuth 接入。 认证方式 方式一&#xff1a;API Key&#xff08;推荐&#xff09; 前往 Anthropic Console 创建 API Key在 O…...

MIKE URBAN中污水处理厂如何进行概化

01 前言应用厂网一体化耦合模型研究水厂间调度和厂前溢流入河污染量等内容时&#xff0c;由于不需要关注污水处理厂内部的具体处理工艺&#xff0c;需要对污水处理厂的关键设施进行概化处理。02 水厂资料收集收集污水处理的工艺流程图和设施设计参数。依据厂网一体化模型的研究…...

树莓派Pico硬件重置失效?试试这个C语言强制重置方案(附完整代码)

树莓派Pico硬件重置失效&#xff1f;试试这个C语言强制重置方案&#xff08;附完整代码&#xff09; 当你在开发树莓派Pico项目时&#xff0c;可能会遇到这样的情况&#xff1a;硬件重置按钮突然失效&#xff0c;外围设备&#xff08;比如LED&#xff09;无法正常复位。传统的B…...

为什么你的Windows 11需要专业优化:4步高效解决方案

为什么你的Windows 11需要专业优化&#xff1a;4步高效解决方案 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and cust…...

ADNS3080光学传感器驱动开发与聚焦校准实战

1. ADNS3080光学运动传感器底层驱动技术解析ADNS3080是Avago&#xff08;现Broadcom&#xff09;推出的一款高精度、低功耗CMOS光学运动传感器&#xff0c;专为机械鼠标、轨迹球及工业位移检测等场景设计。其核心优势在于集成化程度高——片内集成了LED驱动电路、图像采集阵列&…...

5分钟搞定OpenCV摄像头实时监控(附Jupyter避坑指南)

5分钟搞定OpenCV摄像头实时监控&#xff08;附Jupyter避坑指南&#xff09; 在计算机视觉领域&#xff0c;实时摄像头监控是最基础也最实用的功能之一。无论是安防监控、人脸识别还是简单的视频采集&#xff0c;OpenCV都提供了简洁高效的接口。但对于Python初学者和Jupyter Not…...