lambdastreammaven

1.Lambda

(1)Java 8 Lambda 表达式
    在 Java 8 以前,若我们想要把某些功能传递给某个方法,总要去写内部类
或匿名内部类类。代码示例:
        list.sort(new Comparator<User>() {
    @Override
   public int compare(User o1, User o2) {
    return o1.getId()-o2.getId();
   }
  }
  在上面的例子里,为了对集合集合进行排序,我们为 Comparator 接口创建 了一个它的匿名内部类对象,重写接口中的方法,来实现排序功能. 简而言之,在 Java 里将普通的方法像参数一样传值并不简单,为此,Java 8 增加了一个语言级的新特性,名为 Lambda 表达式。

(2)Lambda 表达式简介

   Lambda 表达式是一个匿名函数,我们可以把 lambda 表达式理解为一段 可以传递的代码(将代码段像数据一样传递)。使用它可以写出更简洁, 更灵
活的代码。作为一种更紧凑的代码风格,使 java 语言的表达式能力得到的提升。
Lambda 表达式的本质只是一个 "语法糖" ,由编译器推断并帮你转换包装为
常规的代码,因此你可以使用更少的代码来实现同样的功能。

(3)Lambda 表达式的结构
  Lambda 表达式可以具有零个,一个或多个参数。  可以显式声明参数的类型,也可以由编译器自动从上下文推断参数的类型。 例如 (int a,int b)与 (a,b)相同。
参数用小括号括起来,用逗号分隔。例如 (a, b) 或 (int a, int b) 或 (String a, int b, float c)。
空括号用于表示一组空的参数。例如 () -> 42。
 当有且仅有一个参数时,如果不显式指明类型,则不必使用小括号。
例如 a -> return a*a。
  Lambda 表达式的正文可以包含零条,一条或多条语句。
如果 Lambda 表达式的正文只有一条语句,则大括号可不用写,且表达式
的返回值类型要与匿名函数的返回类型相同。
  如果 Lambda 表达式的正文有一条以上的语句必须包含在大括号(代码块)
中,且表达式的返回值类型要与匿名函数的返回类型相同。
Java 中的 Lambda 表达式通常使用 (argument) -> {body}语法书写,例如:
左侧:lambda 表达式的参数列表
右侧:lambda 表达式中需要执行的功能,即 lambda 体
(arg1, arg2...) -> { body }
(type1 arg1, type2 arg2...) -> { body }
以下是一些 Lambda 表达式的例子:
无参数,无返回值,lambda 体中只有一行代码时,{}可以忽略
() -> System.out.println("Hello World");
无参数,有返回值
() -> { return 3.1415 }; 有参数,无返回值
(String s) -> { System.out.println(s); }
有一个参数,无返回值
s -> { System.out.println(s); }
有多个参数,有返回值
(int a, int b) -> { return a + b; }
有多个参数,表达式参数类型可以不写,jvm 可以根据上下文进行类型推断
(a, b) -> { return a - b; }
(4)什么是功能接口(Functional interface)
   Lambda 表达式只支持函数式接口 也就是只有一个抽象方法的接口.功能 接口是 java 8 中的新增功能,它们只允许一个抽象方法。这些接口也称为单抽 象方法接口。Java 8 也引入了一个注释,即@FunctionalInterface,当你注释 的接口违反了 Functional Interface 的契约时,它可以用于编译器级错误。
以下是自定义功能接口的示例:
@FunctionalInterface
public interface WorkerInterface {
public void doSomeWork();
}
正如其定义所述,功能接口只能有一个抽象方法。如果我们尝试在其中添加一个
抽象方法,则会抛出编译时错误。例如:
@FunctionalInterface
public interface WorkerInterface {
public void doWork();
public void doMoreWork();}

2.Java8Stream

(1)什么是 Stream?

Stream 是 Java8 的新特性,它允许你以声明式的方式处理数据集合,可以把
它看作是遍历数据集的高级迭代器。此外与 stream 与 lambada 表达示结合后
编码效率与大大提高,并且可读性更强。
要澄清的是 java8 中的 stream 与 InputStream 和 OutputStream 是完全
不同的概念.
简单案例:
public static void main(String[] args) {
List<Apple> applestore = new ArrayList();
applestore.add(new Apple(1,"red",500,"河南"));
applestore.add(new Apple(2,"red",400,"陕西"));
applestore.add(new Apple(3,"green",300,"上海"));
applestore.add(new Apple(4,"green",200,"湖北"));
applestore.add(new Apple(5,"green",100,"湖南"));
}
我们的需求是在 applestore 集合中找出红色苹果手机.
使用 Stream 流快速实现操作
List<Apple> apples = applestore
.stream()
.filter(a -> a.getColor().equals("red"))
.collect(Collectors.toList());
这里使用的就是 Java8 中的 stream 流,使用的是声明性方式写的:说明想
要完成什么(筛选,排序,取值),而不说明如何实现一个操作(for 循环)。
同时可以将这些操作链接起来,达到一种流水线式的效果:
Java8 中的集合支持一个新的 Stream 方法,它会返回一个流。

(2)什么是流?

简单的定义,就是“从支持数据处理操作的源,生成的元素序列”。

元素列表: 和集合一样,流也提供了一个接口,访问特定元素类型的一组有序值。
数据源 : 获取数据的源,比如集合。
数据处理操作 : 流更偏向于数据处理和计算,比如 filter、map、find、sort 等。
简单来说,我们通过一个集合的 stream 方法获取一个流,然后对流进行一
系列流操作,最后再构建成我们需要的数据集合。 
语法:
stream of elements +-----> | filter +-> | sorted +-> | map +-> | collect |+
List < Integer > list =
widgets . stream ()
. filter ( b -> b . getColor () == RED )
. sorted (( x , y ) -> x . getWeight () - y . getWeight ())
. sum ();
获取流
使用 Collection 接口下的 stream()
List<String> list = new ArrayList<>();
Stream<String> stream = list.stream();
使用 Arrays 中的 stream() 方法,将数组转成流
Integer[] nums = new Integer[10];
Stream<Integer> stream = Arrays.stream(nums); 使用 Stream 中的静态方法:of()
Stream<Integer> stream = Stream.of(1,2,3,4,5,6);
使用 BufferedReader.lines() 方法,将每行内容转成流
BufferedReader reader=new BufferedReader(new FileReader("stream.txt"));
Stream<String> lineStream = reader.lines();

流操作

流操作可以分为两类: 中间操作 终端操作 。回看之前的代码:
List<Apple> apples = applestore
.stream()
获得流
.filter(a -> a.getColor().equals("red"))
中间操作
.collect(Collectors.toList());
终端操作
简化一下就是:
数据源 => 中间操作 => 终端操作 => 结果
诸如 filter 或者 sort 等中间操作会返回另一个流,进而进行下一步流操作,而终
端操作则是将流关闭,构建新的数据集合对象(也可以不构建)。
中间操作
filter:过滤流中的某些元素,
sorted(): 自然排序,流中元素需实现 Comparable 接口
distinct: 去除重复元素
limit(n): 获取 n 个元素
skip(n): 跳过 n 元素,配合 limit(n)可实现分页
map(): 将其映射成一个新的元素 终端操作
forEach: 遍历流中的元素
toArray:将流中的元素倒入一个数组
Min:返回流中元素最小值
Max:返回流中元素最大值
count:返回流中元素的总个数
Reduce:所有元素求和
anyMatch:接收一个 Predicate 函数,只要流中有一个元素满足条件则返
回 true,否则返回 false
allMatch:接收一个 Predicate 函数,当流中每个元素都符合条件时才返
回 true,否则返回 false
findFirst:返回流中第一个元素
collect:将流中的元素倒入一个集合,Collection 或 Map

3.Maven

(1)Maven简介

  Maven 是 Apache 软件基金会的一个开源项目,是一个优秀的项目构建工具,它
用来帮助开发者管理项目中的 jar,以及 jar 之间的依赖关系、完成项目的编译、
测试、打包和发布等工作。

(2)概念

pom(Project Object Model 项目对象模型)
Maven 管理的项目的根目录下都有一个 pom.xml 文件。
pom.xml 文件指示 Maven 如何工作。
在 pom.xml 文件中配置项目基本信息以及项目构建信息等。比如:项目坐标、
项目依赖的 jar、插件、编译选项等。
一旦在 pom.xml 文件中配置了所依赖的 jar,Maven 会自动从构件仓库中下
载相应的构件。
坐标
Maven 给每个 jar 定义了唯一的标志,这个在 Maven 中叫做项目的坐标,通
过这个坐标可以找到你需要 用到的任何版本的 jar 包。
groupId、artifactId、packaging、version 的组合被称为项目的坐标,它们形
成了项目的唯一标识,Maven 通过坐标来精确定位构件。其中 groupId、
artifactId、version 是必须的,且这三项的值必须唯一,packaging 是可选的(默
认为 jar)。
仓库
中央仓库全球共享,先将 jar 从中央仓库下载到本地仓库,然后在项目中引用本地
仓库的 jar.

(3)Maven 开发环境搭建:

1.  前提
安装 jdk
Maven 工作时需要通过网络下载各种插件以完成任务,因此应保证网络的通
2.下载 Maven 服务器
Maven 官网:http:// maven .apache. org
点击 download 进行下载如下图
3.安装,配置 Maven
  点击下载二进制的 apache-maven -3.6.0-bin.zip 进行解压,”然后在系统环境
中配置环境变量,在path中配置到bin目录,配置成功后输入命令mvn -version
查看版本如下图:
表示 Maven 环境配置成功。
配置本地仓库地址
接下来根据情况在本地磁盘中建立通过 Maven 下载后 jar 文件所存储的文件
夹,一般我们称为”仓库(repository)”;最终是如何将下载的 jar 文件存储到我
们指定的仓库中呢?需要在 Maven 的服务器解压的文件中找到 conf 文件夹下
的 settings.xml 文件进行修改,如下图所示:
配置阿里云 Maven 镜像仓库,下载速度更快
<mirror>
<id>aliMaven </id>
<name>aliyun Maven </name>
<url>http://Maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>

4.idea 中设置 Maven

5.创建 Maven 工程
6. pom.xml 配置
pom.xml 文件基本结构
1.项目基本信息
< modelVersion >4.0.0</ modelVersion >
< groupId >org.example</ groupId >
< artifactId >test</ artifactId >
< version >1.0-SNAPSHOT</ version >
2. 指定编译时使用的 jdk 版本
< properties >
< maven.compiler.source >1.8</ maven.compiler.source > <!-- 设置 Java 源代码兼容性 -->
< maven.compiler.target >1.8</ maven.compiler.target > <!-- 设置编译的目标 JVM 版本 -->
</ properties >
3. 依赖信息
< dependencies >
<!--mysql-->
< dependency >
< groupId >mysql</ groupId >
< artifactId >mysql-connector-java</ artifactId >
< version >8.0.16</ version >
</ dependency >
</ dependencies > Maven 仓库官网(http://mvnrepository.com/)如下图所示:
在此官网就可以下载自己所需开发 jar 包,继续点击链接打开如下:
4. 构建信息
< build >...</ build >

7.Maven命令

Maven 常用命令
1. clean
删除编译的 target
2. compile 编译
3. package 打包

8.添加打包依赖

< build >
< plugins >
< plugin >
< groupId >org.apache.maven.plugins</ groupId >
< artifactId >maven-assembly-plugin</ artifactId >
< configuration >
< descriptorRefs >
<!-- jar 包起的别名 -->
< descriptorRef >jar-with-dependencies</ descriptorRef >
</ descriptorRefs >
< archive >
< manifest >
< addClasspath >true</ addClasspath >
< classpathPrefix >lib/</ classpathPrefix >
<!-- 添加项目中主类 -->
< mainClass >com.ffyc.chatrom.client.frame.Run</ mainClass >
</ manifest >
</ archive >
</ configuration >
< executions >
< execution >
< id >make-assembly</ id >
< phase >package</ phase >
< goals >
< goal >single</ goal >
</ goals >
</ execution >
</ executions >
</ plugin >
</ plugins >
</ build >
执行 maven 命令
复制出 jar 包,到桌面. 命令行进入到桌面
java -jar jar 包名称

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

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

相关文章

Linux显示服务器Wayland切换到X11

1、临时切换 &#xff1a; 注销当前用户账户&#xff0c;返回到登录屏幕。 在登录屏幕上&#xff0c;选择您要登录的用户账户。 在输入密码之前&#xff0c;在登录屏幕的右下角可能有一个齿轮图标&#xff0c;点击它以展开更多选项。 在选项中选择“Ubuntu on Xorg”或“Ubu…

2732. 找到矩阵中的好子集

题目 给你一个下标从 0 开始大小为 m x n 的二进制矩阵 grid。 从原矩阵中选出若干行构成一个行的非空子集&#xff0c;如果子集中任何一列的和至多为子集大小的一半&#xff0c;那么我们称这个子集是好子集。 更正式的&#xff0c;如果选出来的行子集大小&#xff08;即行的…

CNN-O-ELMNet: 优化的轻量化通用模型,用于肺部疾病分类和严重性评估| 文献速递-先进深度学习疾病诊断

Title 题目 CNN-O-ELMNet: Optimized Lightweight andGeneralized Model for Lung DiseaseClassification and Severity Assessment CNN-O-ELMNet: 优化的轻量化通用模型&#xff0c;用于肺部疾病分类和严重性评估 01 文献速递介绍 肺部疾病是全球主要的致残和死亡原因。根…

nextjs-创建layouts共用UI和独立pages页面

原文链接&#xff1a;https://nextjs.org/learn/dashboard-app/creating-layouts-and-pages 01-nextjs起步02-css样式03-处理字体和图片05-页面之间的导航跳转更多 到目前为止&#xff0c;您的应用程序只有一个主页。让我们学习如何使用布局和页面创建更多路由。 本章目标 …

【学习】科大睿智解读ITSS认证中咨询机构的作用

企业拥有ITSS认证这不仅将为企业开拓商机&#xff0c;提升竞争力&#xff0c;还能促使企业改进内部运维流程&#xff0c;提高服务质量&#xff0c;为客户提供更优质的IT运维支持。在ITSS认证中&#xff0c;咨询机构扮演着重要的角色&#xff0c;其主要作用包括以下几个方面&…

金融科技在智能投研领域的应用与前景

随着科技的飞速发展&#xff0c;金融科技&#xff08;FinTech&#xff09;正逐步渗透到金融行业的各个细分领域&#xff0c;其中智能投研领域作为金融科技的重要应用之一&#xff0c;正展现出巨大的潜力和广阔的前景。智能投研利用大数据、人工智能&#xff08;AI&#xff09;等…

Java高级重点知识点-14-Set接口、HashSet底层原理讲解

文章目录 Set接口 (HashSet 、LinkedHashSet)HashSet底层原理(重点理解) Set接口 (HashSet 、LinkedHashSet) 无序不重复 HashSet集合 HashSet 是根据对象的哈希值来确定元素在集合中的存储位置&#xff0c;因此具有良好的存取和查找性能。 public class HashSetDemo {publ…

新型防勒索病毒方案分享无需依靠病毒库

MCK具备可信系统&#xff0c;数据库保护&#xff0c;场景白名单&#xff0c;文件保护四大功能。如何运用在防勒索病毒中 在防勒索病毒的问题上&#xff0c;MCK主机的加固功能显得尤为重要。MCK的四大功能——可信系统、数据库保护、场景白名单以及文件保护&#xff0c;为我们在…

Excel 快速查询工具 2023.7.1 更新

Excel 快速查询工具作者表示这个软件是因为有时候需要在 Excel 和网站之间进行切换非常的麻烦&#xff0c;这款软件可以以半透明的方框位于桌面上。 特点 软件窗口半透明并至于顶部&#xff0c;无需来回切换界面。 实时查询&#xff0c;不用点击查询或者按回车之类的&#x…

IDEA 学习之 启动“卡死”

目录 1. 断点问题2. IDEA 版本问题 1. 断点问题 部分断点涉及应用启动&#xff0c;会导致启动“卡死” 2. IDEA 版本问题 部分 IDEA 版本存在启动问题&#xff0c;本人之前遇到过&#xff08;别人启动三分钟&#xff0c;我启动半个小时&#xff09;。更换别的版本&#xff…

docker技术的说明

根据学习网站整理&#xff1a;Docker 10分钟快速入门_哔哩哔哩_bilibili 小白也能看懂的容器科普说明_哔哩哔哩_bilibili 1.虚拟机&#xff0c;需要模拟硬件系统、运行整个操作系统&#xff0c;但体积臃肿&#xff0c;内存占用较高&#xff0c;程序的性能也会受到影响。 2.…

2024年全国VUE考试中心大全!

大家好&#xff0c;华为HCIA、HCIP、HCIE的笔试部分&#xff0c;都需要在VUE考试中心进行预约。但是很多同学都不知道当地VUE考试中心在哪里&#xff01; 为了解决大家的问题&#xff0c;这边整理了全国各大城市的VUE考试中心名称和详细地址。需要的小伙伴们可以来看看&#x…

JavaWeb系列十一: Web 开发会话技术(Cookie, Session)

韩sir Cookie技术Cookie简单示意图Cookie常用方法Cookie创建Cookie读取JSESSIONID读取指定Cookie Cookie修改Cookie生命周期Cookie的有效路径Cookie作业布置Cookie注意事项Cookie中文乱码问题 Session技术Session原理示意图Session常用方法Session底层机制Session生命周期Sessi…

FuTalk设计周刊-Vol.062

#AI漫谈 热点捕手 1.阿里云推出首个AI程序员&#xff1a;分钟级完成应用开发 在阿里云上海 AI 峰会上&#xff0c;阿里云推出了首个「AI 程序员」&#xff0c;其具备架构师、开发工程师、测试工程师等岗位技能&#xff0c;能完成任务分解、代码编写、测试、问题修复、代码提交…

react学习——14react生命周期图(旧)

1、生命周期图 2、单个组件 class Demo extends React.Component{//构造器constructor(props){console.log("count--constructor")super(props)this.state{count: 1}}//组件将要挂载componentWillMount(){console.log("count--componentWillMount")}//组件…

【AI大模型】ChatTTS——颠覆传统,赋能未来的文本到语音技术

文章目录 一、项目介绍二、代码解释三、从技术角度进行分析四、技术细节与实现五、优缺点分析六、应用场景分析七、未来展望八、结论 一、项目介绍 随着人工智能技术的不断进步&#xff0c;语音合成&#xff08;TTS&#xff09;技术得到了飞速发展。ChatTTS项目作为一个开源的…

用VScode打开keil下的文件中文编码乱码的问题,以及利用VScode转换字符编码的方法

目录 问题描述 解决方法 利用VScode转换字符编码的方法 问题描述 keil中默认的编码是ANIS如下图所示。 而VScode中默认的编码为UTF-8 &#xff0c;打开后如下。 解决方法 建议另存后&#xff0c;再打开目标文件&#xff0c;防止误操作&#xff01; 在VScode的最下方可以找…

MCP2515汽车CAN总线支持SPI接口的控制器芯片替代型号DPC15

器件概述 DPC15是一款独立CAN控制器&#xff0c;可简化需要与CAN总线连接的应用。可以完全替代兼容MCP2515 图 1-1 简要显示了 DPC15 的结构框图。该器件主要由三个部分组成&#xff1a; 1. CAN 模块&#xff0c;包括 CAN 协议引擎、验收滤波寄存 器、验收屏蔽寄存器、发送和接…

中学政史地杂志中学政史地杂志社中学政史地编辑部2024年第4期目录

每月时政 时政要闻&#xff08;2024年3月&#xff09; 李伟; 3-4 热点聚焦 全面加强基础设施建设,积极扩大有效投资 刘华; 5-7《中学生政史地》投稿&#xff1a;cn7kantougao163.com 蒙古国努力应对冰雪灾害 张仁杰; 8-10 复习指导 高中政治经济全球化内容复习…

Linux的免交互

交互&#xff1a;我们发出指令控制程序的运行&#xff0c;程序在接收到指令之后按照指令的效果做出对应的反应。 免交互&#xff1a;间接的通过第三方的方式把指令传送给程序&#xff0c;不用直接的下达指令。 1、here document免交互 ere document免交互&#xff1a;是命令…