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

0735郴州新网/seo快排技术教程

0735郴州新网,seo快排技术教程,做网站数据库要哪一种好,app开发商业计划书模板Lambda表达式: Lambda 表达式背后的思想是函数式编程(Functional Programming)思想。在传统的面向对象编程中,程序主要由对象和对象之间的交互(方法调用)构成;而在函数式编程中,重点…

Lambda表达式:

Lambda 表达式背后的思想是函数式编程(Functional Programming)思想。在传统的面向对象编程中,程序主要由对象和对象之间的交互(方法调用)构成;而在函数式编程中,重点在于函数的应用和组合。

以上就是Lambda表示的背后思想,做为了解即可

主要要看怎么用:

Lambda表达式的格式:

 ()->{}

        () : 重写方法的参数位置
        -> : 将参数传递到方法体中
        {} : 重写方法的方法体 

直接看代码:

public class Test03 {public static void main(String[] args) {ArrayList<Integer> list = new ArrayList<>();list.add(1);list.add(2);list.add(8);list.add(0);list.add(4);Collections.sort(list, new Comparator<Integer>() {@Overridepublic int compare(Integer o1, Integer o2) {return o1-o2;}});System.out.println(list);Collections.sort(list,((o1, o2) -> o1-o2));System.out.println(list);}
}

上面是用Comparator比较器来定义排序规则

下面则是用Lambda表达式

我们对照起来看,就能发现(o1,o2)就是方法的参数  -> 后面就是方法体。

Lambda表达式使用前提:

在使用Lambda表达式之前,我们需要确认必须是函数式接口做为参数传递:

什么是函数式接口?

有且只有一个抽象方法的接口,用@FunctionalInterface去检测

我们可以点击这个Comparator这个方法

 还有我们在线程章节经常用的Runnable接口

new Thread(()->System.out.println(Thread.currentThread().getName())).start();

这时候可能有人会想,Lambda表达式既然只能用函数式接口做为参数,那这个不是很鸡肋嘛

难道我要自己去写一个接口,里面专门再只放一个抽象方法,那这不是更麻烦了嘛

反正我刚刚学的时候,我确实是有这样的疑问

后面问了GPT,其实这个lambda表达式大部分应该是和后面的Stream流一起使用的


Stream流:

Stream流中的"流"不是特指"IO流",它是一种"流式编程"(编程方式),可以看做是"流水线"

个人对流的理解:

在我学习了流的大致用法之后,我其实觉得这个流就是一个操作数组和列表的工具类

里面提供了一系列的方法来操作数组和列表

下面介绍一下Stream流的方法:

Stream流的获取:

这个Stream流的获取就是把数组或者列表转化成流

public class Demo02Stream {public static void main(String[] args) {//1.针对集合:Collection中的方法//Stream<E> stream()ArrayList<String> list = new ArrayList<>();list.add("张三");list.add("李四");list.add("王五");Stream<String> stream = list.stream();System.out.println(stream);//2.针对数组:Stream接口中的静态方法://static <T> Stream<T> of(T... values)Stream<String> stream1 = Stream.of("金莲", "三上", "松下");System.out.println(stream1);}
}
常用方法:
  1. filter(Predicate):过滤方法,根据指定的条件对元素进行筛选。

  2. map(Function):映射方法,将元素按照指定的映射规则进行转换。

  3. forEach(Consumer):遍历方法,对流中的每个元素执行指定的操作。

  4. collect(Collectors):收集方法,将流中的元素收集到一个集合中。

  5. distinct():去除流中的重复元素。

  6. limit(long):截取流中的前几个元素。

  7. skip(long):跳过流中的前几个元素。

  8. count():统计流中元素的个数。

 直接上一段代码:

public class Test01 {public static void main(String[] args) {ArrayList<String> list = new ArrayList<>();list.add("张无忌");list.add("张三丰");list.add("张大彪");list.add("吕不韦");list.add("张三");list.add("赵姬");list.add("张翠山");list.add("嫪毐");//1:筛选出姓张的人System.out.println("筛选出姓张的人");list.stream().filter(s -> s.startsWith("张")).forEach(s -> System.out.print(s+" "));//2:筛选出姓张且名字为两个字的人System.out.println();System.out.println("筛选出姓张且名字为两个字的人");list.stream().filter(s -> s.startsWith("张")).filter(s -> s.length()==2).forEach(s -> System.out.print(s+" "));//3:计算列表的个数System.out.println();System.out.println("计算列表的个数");long count = list.stream().count();System.out.println(count);//4:返回流的前n个对象System.out.println();System.out.println("返回流的前2个对象");Stream<String> limit = list.stream().limit(2);limit.forEach(s -> System.out.print(s+" "));//5:跳过Stream流对象中的前n个元素,返回一个新的Stream流对象System.out.println();System.out.println("跳过Stream流对象中的前n个元素,返回一个新的Stream流对象");list.stream().skip(2).forEach(s-> System.out.print(s+" "));//6:两个流合成一个流System.out.println();System.out.println("两个流合成一个流");ArrayList<String> newlist = new ArrayList<>(Collections.nCopies(list.size(), ""));Collections.copy(newlist,list);System.out.println(newlist);Stream.concat(newlist.stream(),list.stream()).forEach(s -> System.out.print(s+" "));//7:转换流中的类型System.out.println();System.out.println("转换流中的类型");Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5, 6);stream.map(Integer -> Integer+"").forEach(s -> System.out.print(s+" "));}
}

下面来一个项目中的稍微复杂一点的代码加深印象:

在学这个JDK新特性这一章的时候,刚好在写伙伴匹配系统

下面这段鱼皮老师写的代码,我那个时候一直看不懂

现在算是能看懂了

这里的userList就是在数据库中查出来的所有用户列表

这里的tagNameList就是前端传过来的标签列表

所以这一段的逻辑就是根据前端传过来的标签列表进行查找有相同标签的用户

return userList.stream().filter(user -> {String tagsStr = user.getTags();Set<String> tempTagNameSet = gson.fromJson(tagsStr, new TypeToken<Set<String>>() {}.getType());tempTagNameSet = Optional.ofNullable(tempTagNameSet).orElse(new HashSet<>());for (String tagName : tagNameList) {if (!tempTagNameSet.contains(tagName)) {return false;}}return true;}).map(this::getSaftyUser).collect(Collectors.toList());

我们来分析一下整体的代码逻辑:

  1. 将userList转成流对象
  2. 转成流对象之后再从对应的用户中取出标签,因为我这里将标签定义成了一个String类型所以后面就将这个String转成了JSON格式的数据存到这个Set集合中
  3. 用了Optional来对这个转换后的集合做了一个判空处理,如果为空,就new一个空集合
  4. 然后遍历前端传过来的标签列表,如果判断标签列表中有和用户的标签列表不同的元素直接返回false,这样就被流给过滤掉了
  5. 接着再对符合要求的用户做一个映射:map(this::getSaftyUser),这个就相当于:map(this::getSaftyUser),将当前对象(this)的 getSaftyUser 方法应用到 Stream 中的每个元素上,当我们执行完这个filter方法之后,里面的用户就是我们需要的用户了,我们需要对用户进行一个脱敏将一些重要信息隐藏起来。
  6. 然后再将我们粉装好的流对象转成列表返回即可

如果上面的逻辑有点难,举个例子,因为我自己一开始也想了很久

比如有三个用户ABC

他们的标签分别是

A : Java ,男,大一

B : Python ,男,大二

C : C++ ,女,大三

然后这个时候我们传入的tagNameList是:男,大一

执行流程就是:我们会先将上面的三个用户取出来成一个列表就是userList

然后将这个列表转换成流对象,接着将这个列表中的每一个对象都执行后面Lambda表达式中的操作,有点像遍历一遍这个列表,比如将A用户的标签取出来 Java ,男,大一,封装成一个Set<String>集合,再遍历tagNameList这个列表:男,大一,挨个判断,男是否在这个集合中,在就继续判断大一这个标签是否在这个集合中,在就结束循环,返回true,就把这个A用户装到流中。

相关文章:

JDK新特性(Lambda表达式,Stream流)

Lambda表达式&#xff1a; Lambda 表达式背后的思想是函数式编程&#xff08;Functional Programming&#xff09;思想。在传统的面向对象编程中&#xff0c;程序主要由对象和对象之间的交互&#xff08;方法调用&#xff09;构成&#xff1b;而在函数式编程中&#xff0c;重点…...

【ARM】MDK-服务器与客户端不同网段内出现卡顿问题

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 记录不同网段之间的请求发送情况以及MDK网络版license文件内设置的影响。 2、 问题场景 客户使用很久的MDK网络版&#xff0c;在获取授权时都会出现4-7秒的卡顿&#xff0c;无法对keil进行任何操作&#xff0c;彻底…...

c++树(一)定义,遍历

目录 树的定义 树的基本术语 树的初始起点&#xff1a;我们定义为根 树的层次&#xff1a; 树的定义&#xff1a; 树的性质 性质1&#xff1a; 性质2&#xff1a; 树形结构存储的两种思路 树的遍历模板 树上信息统计方式1-自顶向下统计 树上信息统计方式2-自底向上统…...

YOLOv5和LPRNet的车牌识别系统

车牌识别系统 YOLOv5和LPRNet的车牌识别系统结合了深度学习技术的先进车牌识别解决方案。该系统整合了YOLOv5目标检测框架和LPRNet文本识别模型 1. YOLOv5目标检测框架 YOLO是一种先进的目标检测算法&#xff0c;以其实时性能和高精度闻名。YOLOv5是在前几代基础上进行优化的…...

内容安全(深度行为检测技术、IPS、AV、入侵检测方法)

1、深度行为检测技术 深度行为检测技术&#xff1a;是一种基于深度学习和机器学习的技术&#xff0c;它通过分析用户在网络中的行为模式&#xff0c;识别异常或潜在威胁行为&#xff0c;从而保护网络安全和内容安全 分类&#xff1a; 深度包检测技术&#xff08;Deep Packet…...

MySQL双主双从实现方式

双主双从&#xff08;MM-SS&#xff09; 前言 避免单一主服务器宕机&#xff0c;集群写入能力缺失 从 1 复制 主1 &#xff0c;从 2 复制 主 2 主 1 复制 主 2&#xff0c;主 2 复制主 1 也就是 主 1 和主 2 互为主从。主1主2互为主从&#xff0c; 是为了以下情景&#xff0c…...

pico+unity手柄和摄像机控制初级设置

1、摄像头配置 摄像头模式、floor是追踪原点类型&#xff08;将根据设备检测到地面的高度来计算追踪原点&#xff09;&#xff0c; Device 模式时&#xff0c;为通常理解的 Eye 模式&#xff0c;不会将根据设备检测到地面的高度来计算追踪原点 选择floor时&#xff0c;修改相…...

vxe-grid 实现配置式form搜索条件 form搜索条件框可折叠 配置式table

文章目录 效果图代码 效果图 代码 <template><div class"app-container"><vxe-grid refxGrid v-bind"gridOptions" v-if"tableHeight" :height"tableHeight"><template #billDate"{ data }"><e…...

TS相较于JS有什么优缺点

TypeScript&#xff08;TS&#xff09;是JavaScript的一个超集&#xff0c;它添加了静态类型检查和编译时的强大功能&#xff0c;目的是提高代码质量和维护性。相较于JavaScript&#xff0c;TS的主要优点和缺点如下&#xff1a; 优点&#xff1a; 类型安全性&#xff1a;通过…...

【Harmony】SCU暑期实训鸿蒙开发学习日记Day2

目录 Git 参考文章 常用操作 ArkTS的网络编程 Http编程 发送请求 GET POST 处理响应 JSON数据解析 处理响应头 错误处理 Web组件 用生命周期钩子实现登录验证功能 思路 代码示例 解读 纯记录学习日记&#xff0c;杂乱&#xff0c;误点的师傅可以掉了&#x1…...

vue3前端开发-执行npm run dev提示报错怎么解决

vue3前端开发-执行npm run dev提示报错怎么解决&#xff01;今天在本地安装初始化了一个vue3的案例demo。但是当我执行npm run dev想启动它时报错了说&#xff0c;找不到dev。让我检查package.json文件是否包含dev。如下图所示&#xff1a; 实际上&#xff0c;不必惊慌&#xf…...

https 单向认证和双向认证

单向认证 单向认证是客户端(通常是浏览器)验证服务器的身份。服务器向客户端提供数字证书,客户端通过验证该证书的真实性来确认与服务器的连接是安全的。 服务器提供证书:服务器向客户端提供一个数字证书,用于验证服务器的身份。客户端验证服务器:客户端验证服务器的证书…...

Python中Selenium 和 keyboard 库的使用

文章目录 一、Selenium基本使用2.等待元素加载常用操作 keyboard基本使用与 Selenium 联合使用 一、Selenium Selenium 是一个用于浏览器自动化的工具。它可以模拟用户与网页的交互&#xff0c;如点击按钮、填写表单、导航页面等。Selenium 支持多种编程语言&#xff0c;包括 …...

网络安全协议系列

目录 一、安全协议的引入 1.TCP/IP协议族中普通协议的安全缺陷 1.信息泄露 2.信息篡改 3.身份伪装 4.行为否认 2.网络安全需求 二、网络安全协议的定义 三、构建网络安全协议所需的组件 1.加密与解密 2.消息摘要 3.消息验证码 4.数字签名 5.密钥管理 1.建立共享…...

.net core appsettings.json 配置 http 无法访问

1、在appsettings.json中配置"urls": "http://0.0.0.0:8188" 2、但是网页无法打开 3、解决办法&#xff0c;在Program.cs增加下列语句 app.UseAntiforgery();...

opencv—常用函数学习_“干货“_11

目录 二九、图像累加 将输入图像累加到累加图像中 (accumulate) 将输入图像加权累加到累加图像中 (accumulateWeighted) 将输入图像的平方累加到累加图像中 (accumulateSquare) 将两个输入图像的乘积累加到累加图像中 (accumulateProduct) 解释 三十、随机数与添加噪声 …...

WSL-Ubuntu20.04部署环境配置

1.更换Ubuntu软件仓库镜像源 为了在WSL上使用TensorRT进行推理加速&#xff0c;需要安装以下环境&#xff0c;下面将按以下顺序分别介绍安装、验证以及删除环境&#xff1a; #1.C环境配置 gcc、gdb、g #2.gpu环境 cuda、cudnn #3.Cmake环境 CMake #4.OpenCV环境 OpenCV #5.Ten…...

6Python的Pandas:数据读取与输出

Pandas是一个强大的Python数据分析库&#xff0c;提供了读取和输出数据的多种功能。以下是一些常见的数据读取与输出方法&#xff1a; 1. 读取CSV 读取数据 从CSV文件读取数据 import pandas as pd# 读取CSV文件 df pd.read_csv(file_path.csv) print(df.head())从Excel文…...

ubuntu 网络 通讯学习笔记2

1.ubuntu 网络常用命令 在Ubuntu中&#xff0c;有许多网络相关的常用命令。以下是一些主要命令及其用途&#xff1a; ifconfig&#xff1a;此命令用于显示和配置网络接口信息。你可以使用它来查看IP地址、子网掩码、广播地址等。 例如&#xff1a;ifconfig 注意&#xff1a…...

深入理解JS中的事件委托

JavaScript中的事件委托是一种非常有用的事件处理模式,它允许我们利用事件模型的事件冒泡阶段来减少事件处理器的数量,提高网页性能。本文将介绍事件委托的概念、工作原理、优点以及如何在实际项目中应用事件委托。 1、事件模型 事件模型指在Web开发中,处理和管理事件(如…...

Camera Raw:首选项

Camera Raw 首选项 Preferences提供了丰富的配置选项&#xff0c;通过合理设置&#xff0c;可以显著提升图像处理的效率和效果。根据个人需求调整这些选项&#xff0c;有助于创建理想的工作环境和输出质量。 ◆ ◆ ◆ 打开 Camera Raw 首选项 方法一&#xff1a;在 Adobe Bri…...

HLS加密技术:保障流媒体内容安全的利器

随着网络视频内容的爆炸性增长&#xff0c;如何有效保护视频内容的版权和安全成为了一个亟待解决的问题。HLS&#xff08;HTTP Live Streaming&#xff09;加密技术作为一种先进的流媒体加密手段&#xff0c;凭借其高效性和安全性&#xff0c;在直播、点播等场景中得到了广泛应…...

捷配总结的SMT工厂安全防静电规则

SMT工厂须熟记的安全防静电规则&#xff01; 安全对于我们非常重要&#xff0c;特别是我们这种SMT加工厂&#xff0c;通常我们所讲的安全是指人身安全。 但这里我们须树立一个较为全面的安全常识就是在强调人身安全的同时亦必须注意设备、产品的安全。 电气&#xff1a; 怎样预…...

UE4-初见虚幻引擎

一.创建自己的工程 1.启动 a.通过桌面双击图标来打开对应版本的虚幻引擎 b.通过EPIC启动器开启动虚幻引擎 2.选择或新建项目 ps:高版本虚幻编辑器可以打开低版本的虚幻项目&#xff0c;但是高版本虚幻的项目不可以由低版本的虚幻编辑器打开。 3. 选择要打开的项目 4.选择模版 选…...

基于Vue CLI 3构建Vue3项目(Vue2也可参考)

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…...

Midjourney 绘画提示词汇总:让你的 AI 绘画与众不同

在 AI 技术迅速发展的今天&#xff0c;AI 绘画已经成为了创意工作中的一大利器。Midjourney 作为其中的佼佼者&#xff0c;以其强大的绘画能力和高质量的输出受到了广大用户的喜爱。为了帮助你充分发挥 Midjourney 的潜力&#xff0c;我们整理了一些能够让 AI 绘画与众不同的提…...

React和Vue.js的相似性和差异性是什么?

React 和 Vue.js 都是流行的前端 JavaScript 框架&#xff0c;它们有一些相似性和差异性&#xff1a; 相似性&#xff1a; 组件化&#xff1a;React 和 Vue.js 都支持组件化开发&#xff0c;允许开发者将界面拆分为独立的组件&#xff0c;提高代码的复用性和可维护性。…...

Nginx 和 PHP(特别是使用 Swoole 扩展)的配置和调优

针对千万级用户的高并发应用&#xff0c;Nginx 和 PHP&#xff08;特别是使用 Swoole 扩展&#xff09;的配置和调优是至关重要的。 以下是详细的配置和调优建议&#xff1a; Nginx 配置和调优 工作进程数&#xff08;worker_processes&#xff09;&#xff1a; 根据 CPU 核心…...

Kafka Producer发送消息流程之消息异步发送和同步发送

文章目录 1. 异步发送2. 同步发送 1. 异步发送 Kafka默认就是异步发送&#xff0c;在Main线程中的多条消息&#xff0c;没有严格的先后顺序&#xff0c;Sender发送后就继续下一条&#xff0c;异步接受结果。 public class KafkaProducerCallbackTest {public static void mai…...

Flutter 状态管理调研总结

一, 候选状态管理组件简介 0. flutter_hooks 一个 React 钩子在 Flutter 上的实现&#xff1a;Making Sense of React Hooks 钩子是一种用来管理 Widget 生命周期的新对象&#xff0c;以减少重复代码、增加组件间复用性&#xff0c;允许将视图逻辑提取到通用的用例中并重用&…...