集合的进阶
不可变集合
-
创建不可变的集合
-
在创建了之后集合的长度内容都不可以变化

-
-
静态集合的创建在list ,set ,map接口当中都可以获取不可变集合
| 方法名称 | 说明 |
|---|---|
| static list of(E …elements) | 创建一个具有指定元素集合list集合对象 |
| staticlist of(E…elements) | 创建一个具有指定元素的set集合 |
| static<k,v> Map<k,v> of(E…elements) | 创建一个具有指定元素的Map集合 |
-
这个集合是不能删除和修改
-
List集合
/*不能添加修改操作*/
List<String> list = List.of("lishi", "changff", "zhangshan", "wangshang");list.remove("lishi");list.add("shuxili");list.set(0,"bbbb");

- set集合
- 注意事项:信息不能重复
package ImmutableDemo;import java.util.Iterator;
import java.util.Set;public class Demo2 {public static void main(String[] args) {Set<String> s=Set.of("lishi", "changff", "zhangshan", "wangshang","dkjkjf");Iterator<String> it = s.iterator();while (it.hasNext() ) {System.out.println(it.next());}System.out.println("---------------");System.out.println("---------------");
// s.remove("lishi");
// s.add("shuxili");}
}

- map集合
- 注意事项:键值对信息不能重复
package ImmutableDemo;import java.util.Map;
import java.util.Set;public class Demo3 {public static void main(String[] args) {Map<String, String> mapDeom = Map.of("南京", "1000", "北京", "10000", "上海", "8000");Set<String> keySet = mapDeom.keySet();for (String s : keySet) {System.out.println(s);System.out.println(mapDeom.get(s));}System.out.println("---------");Set<Map.Entry<String, String>> entries = mapDeom.entrySet();for (Map.Entry<String, String> entry : entries) {String key = entry.getKey();String value = entry.getValue();System.out.println(key + "=" + value);}}
}
- Map
由于map集合的特殊,还有一种方法为Map.ofEntries( )方法可以传递多个键值对 对象
package ImmutableDemo;import java.util.HashMap;
import java.util.Map;
import java.util.Set;public class Demo4 {public static void main(String[] args) {HashMap<String,String> h =new HashMap<>();h.put("aaa","111");h.put("bbb","222");h.put("ccc","333");h.put("ddd","444");h.put("eee","555");/*先获取键值对,对像*/Set<Map.Entry<String, String>> entries = h.entrySet();Map.Entry[] array = entries.toArray(new Map.Entry[0]);/*先将键值对对象转化为数组,0长度不会影响,在底层会自动比较,然后转成集合的长度*//*创建不可变集合*/Map map = Map.ofEntries(array);/*可变集合底层是一个数组,可以将数组直接传过去*/
// map.put("fff","777");
// map.remove("aaa");/*简写*/Map<Object, Object> map1 = Map.ofEntries(h.entrySet().toArray(new Map.Entry[0]));}
}

总结:
-
特点:
定义完成后不可以进行增删改
-
如何创建不可变集合

- 三种方式的细节

Stream流:
-
思想:工厂流水线,每个负责一项功能,结合lambda表达式来简化对数组的操作
-
Stream流的使用步骤:
1.得到一条Stream流,并添加数据
2.使用中间方法对流水线进行操作
3.使用终结方法结束对Stream的操作例如 sout获取方法 方法名 说明 单列集合 default Stream stream() Collection 中的默认方法 双列集合 无 无法直接使用stream流 数组 Public static StramStream(T[] array) Arrays工具类中的静态方法调用 一堆零散数据 public staticStream of(T…value) Stream接口中的静态方法 -
单列集合
public static void main(String[] args) {/*单列集合直接调用,list是collections的实现类*/ArrayList<String> list =new ArrayList<>();Collections.addAll(list,"A","B","C","E","F","G");list.stream().forEach(s -> System.out.println(s ));}- 双列集合
注意事项:不能直接使用,必须转化为单列结合最后(keyset,entery)
- 双列集合
public static void main(String[] args) {HashMap<String,Integer> ha =new HashMap<>();ha.put("aaa",1);ha.put("bbb",2);ha.put("ccc",3);ha.put("ddd",4);ha.put("eee",5);/*获取键值 */ha.keySet().stream().forEach(s -> System.out.println(s));System.out.println();/*获取键值对 对象,*/ha.entrySet().stream().forEach(stringIntegerEntry -> System.out.println(stringIntegerEntry));}-
数组
注意事项:不能直接使用需要借助工具类arrays中的stream流
/*数组*/public static void main(String[] args) {int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};String [] st ={"aaa","bbb","ccc"};/*获取stream流*/Arrays.stream(arr).forEach(s-> System.out.println(s));System.out.println();Arrays.stream(st).forEach(s1 -> System.out.println(s1));} -
零散数据
注意事项:数据的类型必须一致,在添加引用类型的数组是可以直接使用,但是基本数据类型的数组是不能使用的会吧整个数组当成一个元素直接传递到steam流中public static void main(String[] args) {Stream.of(1,2,3,4,5,6,7,8,9).forEach(s-> System.out.println(s));}
-

stream流中的中间方法:

- Filter 过滤
注意事项:stream流在使用一次后就自动关闭,不能在下面接着使用,建议链式编程
在stream流中修改了数据,原来集合里面的数据不会发生改变
ArrayList<String> list = new ArrayList<>();Collections.addAll(list, "aaa", "bbb", "ccc", "ddd", "eee");list.stream().filter(new Predicate<String>() {@Overridepublic boolean test(String s) {/*true:留下 false:舍弃*/return s.startsWith("a");}}).forEach(s -> System.out.println(s));/*简化*/list.stream().filter(s -> s.startsWith("a")).forEach(s -> System.out.println(s));
-
Limit 获取前几个元素,limit(个数)
/*limit获取前几元素,不是索引是元素*/list.stream().limit(4).forEach(s -> System.out.println(s)); -
skip 跳过前几个元素,skip(个数)
/*skip跳过前几个元素*/list.stream().skip(2).forEach(s -> System.out.println(s));练习:
/*练习获取其中3-4*/list.stream().limit(4).skip(2).forEach(s -> System.out.println(s));System.out.println();list.stream().skip(2).limit(2).forEach(s -> System.out.println(s));System.out.println( );-
distinct 去重复,在底层是hashset去重复
/*去重复*/list1.stream().distinct().forEach(s -> System.out.println(s));/*引用数据类型可以直接,自定义的对象需要重写hascode和equales方法*/
-
Concat 流合并
**注意事项:**类型一致,不会提升类型,不一致会提升到俩流的父类,不能使用单独流的特有功能
-
/*流合并,类型一致,不会提升类型,不一致会提升到俩流的父类,不能使用单独流的特有功能*/Stream.concat(list1.stream().distinct(),list.stream()).forEach(s -> System.out.println(s));
Map 流的转换:
/*流的转换*/list2.stream().map(new Function<String, Integer>() {/*string表示流里面原来就有的数据* integer表示的是要转换了之后的类型*/@Overridepublic Integer apply(String s) {String[] split = s.split("-");/*切割方法split*/String s1 = split[1];int i = Integer.parseInt(s1);/*integer中的转换方法*/return i;}}).forEach(s -> System.out.println(s));System.out.println("================================");/*简化*/list2.stream().map(s -> Integer.parseInt(s.split("-")[1])).forEach(s-> System.out.println(s));
终结方法:

- 遍历
/*遍历方式*/list2.stream().forEach(s -> System.out.println(s));
-
统计
/*将Stream流中的数据进行统计*/System.out.println(list2.stream().distinct().count()); -
收集流中的数据放到数组中
String[] array = list2.stream().toArray(new IntFunction<String[]>() {@Overridepublic String[] apply(int value) {return new String[value];}});System.out.println(Arrays.toString(array));/*简化*/String[] array1 = list2.stream().toArray(value -> new String[value]);System.out.println(Arrays.toString(array));
-
收集流中的数据放到集合里面
注意事项:
lis集合是不会去重复的
set集合是会去重复的
map里面的键值对不能重复
/*list*/List<String> collect = list2.stream().filter(s -> "男".equals(s.split("-")[2])).collect(Collectors.toList());System.out.println(collect);/*set*/Set<String> collect1 = list2.stream().filter(s -> "男".equals(s.split("-")[2])).collect(Collectors.toSet());System.out.println(collect1);/*迭代器遍历*/Iterator<String> iterator = collect.iterator();while (iterator.hasNext()) {System.out.println(iterator.next());}/*增强for*/for (String s : collect) {System.out.println(s);}/*foreach*/collect.forEach((s)-> { System.out.println(s); });/*收集到map集合当中注意键值对不能重复*/Map<String, Integer> mapcollect = list2.stream().filter(s -> "男".equals(s.split("-")[2]))/*在map集合里面要传递2个数据,键的获取规则,值的获取规则*//*在键或者值里面有2个类型第一个表示流里面的类型,第二个表示键或者值里面的类型,他们是交叉对应的*/.collect(Collectors.toMap(new Function<String, String>() {@Overridepublic String apply(String s) {return s.split("-")[0];}}, new Function<String, Integer>() {@Overridepublic Integer apply(String s) {return Integer.parseInt(s.split("-")[1]);}}));/*简化*/Map<String, Integer> mapcollect2 = list2.stream().filter(s -> "男".equals(s.split("-")[2])).collect(Collectors.toMap(s -> s.split("-")[0],s -> Integer.parseInt(s.split("-")[1])));System.out.println(mapcollect2);System.out.println(mapcollect);
总结:

相关文章:
集合的进阶
不可变集合 创建不可变的集合 在创建了之后集合的长度内容都不可以变化 静态集合的创建在list ,set ,map接口当中都可以获取不可变集合 方法名称说明static list of(E …elements)创建一个具有指定元素集合list集合对象staticlist of(E…elements)创…...
【LeetCode刷题(数据结构与算法)】:数据结构中的常用排序实现数组的升序排列
现在我先将各大排序的动图和思路以及代码呈现给大家 插入排序 直接插入排序是一种简单的插入排序法,其基本思想是: 把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为 止,得到一个…...
【HTML+CSS】零碎知识点
公告滚动条 <!DOCTYPE html> <html><head><title>动态粘性导航栏</title><style>.container {background: #00aeec;overflow: hidden;padding: 20px 0;}.title {float: left;font-size: 20px;font-weight: normal;margin: 0;margin-left:…...
嵌入式开发学习之STM32F407串口(USART)收发数据(三)
嵌入式开发学习之STM32F407串口(USART)收发数据(三) 开发涉及工具一、选定所使用的串口二、配置串口1.配置串口的I/O2.配置串口参数属性3.配置串口中断4.串口中断在哪里处理5.串口如何发送字符串 三、封装串口配置库文件1.创建头文…...
python:talib.BBANDS 画股价-布林线图
python 安装使用 TA_lib 安装主要在 http://www.lfd.uci.edu/~gohlke/pythonlibs/ 这个网站找到 TA_Lib-0.4.24-cp310-cp310-win_amd64.whl pip install /pypi/TA_Lib-0.4.24-cp310-cp310-win_amd64.whl 编写 talib_boll.py 如下 # -*- coding: utf-8 -*- import os impor…...
ESP32网络开发实例-自定义主机名称
自定义主机名称 文章目录 自定义主机名称1、软件准备2、硬件准备3、代码实现ESP32 的默认主机名是 expressif。 但是,如果正在使用多个 ESP32 设备,并且在某些时候希望在软接入点模式下使用它们时通过名称来区分设备。 例如,在基于物联网的项目中有多个节点,例如温度、湿度…...
【ELK 使用指南 3】Zookeeper、Kafka集群与Filebeat+Kafka+ELK架构(附部署实例)
EFLKK 一、Zookeeper1.1 简介1.2 zookeeper的作用1.3 Zookeeper的特点1.5 Zookeeper的数据结构1.6 Zookeeper的应用场景1.7 Zookeeper的选举机制(重要)1.7.1 第一次启动时1.7.2 非第一次启动时 二、Zookeeper集群部署2.1 安装前准备2.2 安装 ZookeeperSt…...
手写redux的connect方法, 使用了subscribe获取最新数据
一. 公共方法文件 1. connect文件 import React, { useState } from "react"; import MyContext from "./MyContext"; import _ from "lodash";// 模拟react-redux的 connect高阶函数 const connect (mapStateToProps, mapDispatchToProps) &…...
数据结构--B树
目录 回顾二叉查找树 如何保证查找效率 B树的定义 提炼 B树的插入和删除 概括B树的插入方法如下 B树的删除 导致删除时,结点不满足关键字的个数范围时(需要借) 如果兄弟不够借,需要合体 回顾B树的删除 B树 B树的查找 …...
【音视频|ALSA】基于alsa-lib开发ALSA应用层程序--附带源码
😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 🤣本文内容🤣&a…...
嵌入式养成计划-43----QT QMainWindow中常用类的使用--ui界面文件--资源文件的添加--信号与槽
一百零九、QMainWindow中常用类的使用 109.1 菜单栏 QMenuBar 菜单栏 QMenuBar 最多只能有一个 109.2 工具栏 QToolBar 工具栏 QToolBar 可以有多个 109.3 状态栏QStatusBar 状态栏 QStatusBar 最多只能有一个 109.4 浮动窗口QDockWidget 浮动窗口 可以有多个 109.5 代…...
【Yarn】清除Yarn的缓存,更新Yarn本身、更新项目的依赖项
要清除Yarn的缓存,可以运行以下命令: yarn cache clean这将清除Yarn的缓存目录。 要更新Yarn本身,可以运行以下命令: yarn self-update这将下载并安装最新版本的Yarn。 如果要更新项目的依赖项,可以运行以下命令&a…...
点云从入门到精通技术详解100篇-雨雾环境下多传感器融合SLAM方法(续)
目录 4 基于球面投影的激光视觉融合里程计 4.1 引言 4.2 视觉惯性里程计 4.2.1特征点提取与匹配...
解决GET请求入参@NotNull验证不生效问题
一、问题 get请求NotNull验证不生效 二、解决方案 两个步骤: 在该方法的controller类上加Validated;在参数面前加NotNull; 三、其他注解 //被注释的元素必须为null Null //被注释的元素不能为null NotNull //被注释的元素必须为true Ass…...
《golang设计模式》第三部分·行为型模式-01-责任链模式(Chain of Responsibility)
文章目录 1 概念1.1 角色1.2 类图 2. 代码示例2.1 设计2.2 代码2.3 类图 1 概念 责任链(Chain of Responsibility)是指将客户端请求处理的不同职责对象组成请求处理链。 客户端只需要将请求交付到该链上,而不需要关心链上含有哪些对象。请求…...
环境变量【使用命令行参数引出环境变量】
前提:命令行参数 大家在写C/C程序的时候肯定见过下面这种情况: main函数里面携带的参数,平常写代码过程中很少用到这两个参数,接下来我们就研究一下 我们也不知道 指针数组argv里面到底保存的是什么,也不知道这个a…...
【Java 进阶篇】JavaScript BOM History 详解
当用户浏览网页时,可以使用JavaScript的BOM (Browser Object Model)中的History对象来访问浏览器的历史记录。这个对象允许您在不更改页面的情况下导航到不同的历史记录项,或者查看有关用户访问过的页面的信息。 在本篇博客中,我们将围绕Jav…...
【计算机网络】https协议
文章目录 1 :peach:基本概念:peach:1.1 :apple:什么是HTTPS?:apple:1.2 :apple:什么是加密?:apple:1.3 :apple:常见的加密方式:apple:1.3.1 :lemon:对称加密:lemon:1.3.2 :lemon:⾮对称加密:lemon: 1.4 :lemon:数据指纹:lemon: 2 :peach:HTTPS的⼯作过程…...
React之受控组件和非受控组件以及高阶组件
一、受控组件 受控组件,简单来讲,就是受我们控制的组件,组件的状态全程响应外部数据 举个简单的例子: class TestComponent extends React.Component {constructor (props) {super(props);this.state { username: lindaidai }…...
中国移动集采120万部,助推国产5G赶超iPhone15
近期媒体纷纷传出消息指中国移动将大规模集采,预计将采购国产5G手机120万台,加上另外两家运营商的集采数量,估计集采数量可能达到300万部,如此将有助于它在国内高端手机市场赶超苹果。 国产5G手机在8月底突然上市,获益…...
【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...
家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...
Swagger和OpenApi的前世今生
Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章,二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑: 🔄 一、起源与初创期:Swagger的诞生(2010-2014) 核心…...
RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...
AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别
【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势…...
Golang——9、反射和文件操作
反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一:使用Read()读取文件2.3、方式二:bufio读取文件2.4、方式三:os.ReadFile读取2.5、写…...
pycharm 设置环境出错
pycharm 设置环境出错 pycharm 新建项目,设置虚拟环境,出错 pycharm 出错 Cannot open Local Failed to start [powershell.exe, -NoExit, -ExecutionPolicy, Bypass, -File, C:\Program Files\JetBrains\PyCharm 2024.1.3\plugins\terminal\shell-int…...
