lambdastreammaven

news2024/11/24 11:43:21

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.coloradmin.cn/o/1849857.html

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

相关文章

C语言| 数组倒置算法

数组倒置 方法一 1 定义两个数组a[5] b[5],两个循环变量i j 2 用for循环&#xff0c;把数组a的最后一个数&#xff0c;赋值给数组b第一个元素 3 输出数组b 【程序代码】 #include <stdio.h> int main(void) { int a[5] {11, 22, 33, 44, 55}; int b[5]; …

nodejs从基础到实战学习笔记-nodejs简介

一、Node.js简介 • Node.js是一个能够在服务器端运行JavaScript的开放源代码、跨平台JavaScript运行环境。 • Node采用Google开发的V8引擎运行js代码&#xff0c;使用事件驱动、非阻塞和异步I/O模型等技术来提高性能&#xff0c;可优化应用程序的传输量和规模。 1.1 特性 …

PPT的精细化优化与提升策略

&#x1f44f;&#x1f44f;&#x1f44f;欢迎来到我的博客 ! 亲爱的朋友们&#xff0c;欢迎您们莅临我的博客&#xff01;这是一个分享知识、交流想法、记录生活的温馨角落。在这里&#xff0c;您可以找到我对世界独特视角的诠释&#xff0c;也可以与我一起探讨各种话题&#…

【SAP ME 42】关于SAP ME自定义开发中NWDS中配置JDK

1、NWDS启动配置JDK -vm C:/Java/jdk1.8.0_361/bin 2、开发组件配置JDK

一种简单的图像分析

简介 一种简单的边界分析&#xff0c;通过相邻的像素的灰度进行判断&#xff0c;计算出边界。 测试1 原图 结果 测试2 原图 结果 代码说明 主要的技术在makeTable过程中&#xff0c;这个过程主要执行了以下几步 计算每个像素的灰度计算相邻多个像素的最大灰度差统计灰度差…

GPT-4o目前暂无音频输出的能力

OpenAI的发布会惊艳的操作&#xff0c;近乎实时的语音对话&#xff0c;让很多人向往。 但实际上Chat对话时&#xff0c;尚无输出音频的能力&#xff0c;可能还未开放。 这是国外的一个开发小哥的交流帖子&#xff0c;可能还需要些时日才能用的上实时的音频输出。 不过当前Op…

Python MicroPython库:嵌入式开发

更多Python学习内容&#xff1a;ipengtao.com MicroPython是一种精简高效的Python解释器&#xff0c;专为运行在微控制器和受限环境下设计。它支持大多数Python语法和标准库&#xff0c;同时提供了丰富的硬件控制接口&#xff0c;使开发者能够用Python编写嵌入式应用。MicroPyt…

Windows系统下安装RabbitMQ详细步骤

声明&#xff1a;原文参考链接出自&#xff1a; 如何在Windows系统下安装RabbitMQ_rabbitmq windows安装-CSDN博客 https://zhuanlan.zhihu.com/p/693160757 一、RabbitMQ安装软件资源准备 因为RabbitMQ是Erlang语言开发的&#xff0c;因此安装Erlang环境在进行安装RbbitMQ的…

展讯-GPIO操作

1.修改IO配置 以GPIO92为例 IO配置文件在&#xff1a; bsp/kernel/kernel4.14/arch/arm64/boot/dts/sprd/uis8581e5h10.dts bsp/bootloader/u-boot15/board/spreadtrum/uis8581e5h10/pinmap-sp9863a.c 配置 按上述内容&#xff0c;配置IO口 编译之前查看硬件GPIO&#xff0c…

【Java】已解决java.io.UnsupportedEncodingException异常

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决java.io.UnsupportedEncodingException异常 在Java编程中&#xff0c;java.io.UnsupportedEncodingException异常通常发生在尝试使用java.nio.charset.Charset或者它的旧版本…

LabVIEW在脑机接口(BCI)研究中的应用

脑机接口&#xff08;Brain-Computer Interface&#xff0c;BCI&#xff09;技术通过解读大脑活动&#xff0c;将人类思维与计算机或其他设备连接起来&#xff0c;广泛应用于神经康复、认知研究和人机交互等领域。LabVIEW作为强大的图形化编程环境&#xff0c;在BCI研究中发挥着…

私域电商新纪元:消费增值模式的创新与成功实践

大家好&#xff0c;我是吴军&#xff0c;很高兴能够与您分享私域电商领域的魅力与机遇。今天&#xff0c;我将为大家呈现一个令人瞩目的成功案例&#xff0c;这个案例充分展现了私域电商的巨大潜力和无限可能。 在短短一个月的时间里&#xff0c;我们的客户成功实现了业绩的飞跃…

21.智能指针(上)

目录 一、概念二、Box\<T\>2.1 概念与应用场景2.2 简单应用2.3 递归类型的创建 三、通过Deref trait将智能指针当作常规引用处理3.1 常规引用3.2 像引用一样使用Box\<T\>3.3 自定义智能指针3.4 函数和方法的隐式解引用强制转换3.5 解引用强制转换与可变性交互 四、…

家用洗地机哪个品牌好用?四款性价比高的洗地机推荐

还在为下班赶回家打扫卫生而烦恼&#xff1f;曾经的我也是这样&#xff0c;日复一日手动清洁&#xff0c;疲惫不堪。直到有一天&#xff0c;我决定相信现代科技&#xff0c;深入研究了市面上的各种洗地机评测&#xff0c;从此踏入了智能清洁家电的新世界。洗地机作为现代家居的…

吉时利 2420(KEITHLEY) 高电流源表

Keithley 2420高电流源表&#xff0c;60V&#xff0c;3A&#xff0c;60W Keithley 2420 高压源表是一款 60W 仪器&#xff0c;设计用于输出和测量 5V&#xff08;输出&#xff09;和 1V&#xff08;测量&#xff09;至 60V 的电压以及 100pA 至 3A 的电流。2420 型的生产测试应…

Honeyview图片查看:从未如此流畅

名人说&#xff1a;一点浩然气&#xff0c;千里快哉风。 ——苏轼 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 一、软件介绍1、Honeyview2、核心特点 二、下载安装1、下载2、安装 三、使用方法1、图片打开2、自…

dll丢失应该怎么解决,总结5种解决DLL丢失问题的方法

在数字时代&#xff0c;我们与计算机的每一天都密不可分。然而&#xff0c;就像所有技术产品一样&#xff0c;我们的计算设备也时不时地会出现一些问题&#xff0c;让人头疼不已。就在上周&#xff0c;我遭遇了一个令人崩溃的技术挑战——DLL文件丢失。这个看似微不足道的小问题…

五十六、openlayers官网示例Magnify解析——在地图上实现放大镜效果

官网demo地址&#xff1a; Magnify 这篇讲了如何在地图上添加放大镜效果。 首先加载底图 const layer new TileLayer({source: new StadiaMaps({layer: "stamen_terrain_background",}),});const container document.getElementById("map");const map …

对于初学者,该如何选择大模型框架 LlamaIndex 与 LangChain ?

节前&#xff0c;我们星球组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学. 针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 汇总合集&…

内容安全复习 6 - 白帽子安全漏洞挖掘披露的法律风险

文章目录 安全漏洞的法律概念界定安全漏洞特征白帽子安全漏洞挖掘面临的法律风险“白帽子”安全漏洞挖掘的风险根源“白帽子”的主体边界授权行为边界关键结论 安全漏洞的法律概念界定 可以被利用来破坏所在系统的网络或信息安全的缺陷或错误&#xff1b;被利用的网络缺陷、错…