超详细Lambda表达式与Stream流及Maven环境搭配

news2024/12/23 5:40:40

目录

 1.什么是Lambda表达式

2.为什么使用Lambda表达式

3.Lambda表达式语法

4.语法糖

5.Stream流

5.1stream流是什么

特点

5.2为什么要用Stream

5.3Stream流中的静态方法

6.Maven(项目编译打包软件)

6.1什么是Maven

6.2为什么要使用Maven

6.3Maven 中的相关概念

6.4 Maven 开发环境配置


1.什么是Lambda表达式

Lambda表达式是一个匿名函数,类似于内部类,可以将代码段像数据一样传递,匿名函数顾名思义就是隐藏了函数名。匿名函数格式 (参数)->函数体{  },参数可以有也可以没有。

2.为什么使用Lambda表达式

原先没有Lambda表达式时如要使用线程里的run方法必须实现runnable接口或者继承Thread 类并重写run方法,很麻烦,可能我们只需要run放法里的东西,这时候就可以使用Lambda表达式大大简化代码,所以Lambda表达式又称为“语法糖”

如不使用Lambda之前

package Demo;

public class Thread1 extends Thread{
    @Override
    public void run() {
        System.out.println("继承了Thread的run方法");
    }
}
package Demo;

public class Test {
    public static void main(String[] args) {
        new Thread1().start();

    }
}

使用Lambda表达式后

new Thread(()->{
            System.out.println("使用lambda表达式run方法");
        }).start();

3.Lambda表达式语法

Lambda表达式在Java语言中引入了一个操作符**“->”**,该操作符被称为Lambda操作符或箭头操作符。它将Lambda分为两个部分:

  • 左侧:指定了Lambda表达式需要的所有参数
  • 右侧:制定了Lambda体,即Lambda表达式要执行的功能。
  • 参数用小括号括起来,用逗号分隔。例如 (a, b) 或 (int a, int b) 或 (String a, int b, float c)。
      空括号用于表示一组空的参数。例如 () -> 42
  • Lambda表达式的参数列表的数据类型可以省略不写,因为JVM可以通过上下文推断出数据类型,即“类型推断”
  • 在执行javac编译程序时,JVM根据程序的上下文推断出了参数的类型。Lambda表达式依赖于上下文环境。
  • 注意因为Lambda表达式是靠推断来判断参数的类型的,所以lambda表达式中只允许有一个方法。
4.语法糖

语法糖就是Java中为了简化代码量而设置的语法。如:

5.Stream流
5.1stream流是什么

Stream 是 Java8 的新特性,它允许你以声明式的方式处理数据集合,可以把

它看作是遍历数据集的高级迭代器。此外与 stream 与 lambada 表达示结合后
编码效率与大大提高,并且可读性更强。
要澄清的是 java8 中的 stream 与 InputStream 和 OutputStream 是完全
不同的概念.
特点

1、代码简洁:函数式编程写出的代码简洁且意图明确,使用stream接口让你从此告别for循环

2、多核友好:Java函数式编程使得编写并行程序如此简单,就是调用一下方法

5.2为什么要用Stream
使用Stream流 说明想 要完成什么(筛选,排序,取值),而不说明如何实现一个操作(for 循环)。 同时可以将这些操作链接起来,达到一种流水线式的效果,大大简洁代码。
例如:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.stream.Stream;

public class Stream1 {
    public static void main(String[] args) {
        ArrayList<Integer> arrayList=new ArrayList();
                arrayList.add(1);
             arrayList.add(2);
           arrayList.add(3);
          arrayList.add(4);
          Stream<Integer> stream= arrayList.stream();//把集合转化为流

         Integer a[]=new Integer[]{1,2,3,4,5};
          Stream<Integer> stream1=Arrays.stream(a);//将数组转化为流
           Stream stream2= Stream.of(1,2,3,4);

    }
}

使用Stream后对于数组,集合一些问题就可以不用for循环解决了,大大简化代码。

  int a[]=new int[]{6,1,3,5,7,3};
       Arrays.stream(a).sorted().distinct().forEach((e)->{
            System.out.print(e);
           System.out.print(" ");
        });

原先要对数组进行排序去重以及输出,不用api的前提,要for循环遍历,一一比较元素,并定义新数组将排序好的数组装入,并通过for循环输出。

流更偏向于数据处理和计算,比如 filter、map、find、sort 等。

简单来说,我们通过一个集合的 stream 方法获取一个流,然后对流进行一
系列流操作,最后再构建成我们需要的数据集合。
5.3Stream流中的静态方法
流操作
流操作可以分为两类: 中间操作 终端操作.
List<Apple> apples = applestore .stream()
获得流
.filter(a -> a.getColor().equals("red"))
中间操作
.collect(Collectors.toList());
终端操作
最终将流转化为List集合。
数据源 => 中间操作 => 终端操作 => 结果
(1)中端操作
  filter 过滤元素
  sorted 排序
  distinct 去除重复元素
   limit 数量限制
   skip 跳过指定元素
   forEach() 遍历数组和集合,lambda表达式,隐式函数
   map(): 将其映射成一个新的元素

   int a[]=new int[]{6,1,3,5,7,3};
    
        Arrays.stream(a).skip(2).limit(2).forEach((e)->{
            System.out.print(e);
            System.out.print(" ");

        });

 int sa= Arrays.stream(a).distinct().max().getAsInt();
        System.out.println(sa);

        int mi=Arrays.stream(a).distinct().min().getAsInt();
        System.out.println(mi);

       int sum= Arrays.stream(a).distinct().reduce((o1,o2)->{
              return o1+o2;
          }).getAsInt();
        System.out.println(sum);

        boolean an=Arrays.stream(a).distinct().anyMatch((o1)->{
              return o1>7;
          });
        System.out.println(an);

       long c= Arrays.stream(a).distinct().count();
        System.out.println(c);*/
结果分别如图所示
(2) 终端操作:把流转化为最终结果
 max:返回流中元素最大值
 min:返回流中元素最小值
 count::返回流中元素最小值
 reduce:返回流中所有元素求和
 anyMatch:接收一个 Predicate 函数,只要流中有一个元素满足条件则返 回 true,否则返回 false
 allMatch:接收一个 Predicate 函数,只要流中所有元素满足条件则返 回 true,否则返回 false
 findFirst:返回第一个元素
 toArray:将流中的元素倒入一个数组
collect:将流中的元素倒入一个集合,Collection 或 Map

  1. 分组操作和分组后再进行排序操作:

    • 假设我们有一个包含学生对象的列表,每个学生对象包含姓名和年龄属性。我们想要按照学生的学号进行分组,并且在每个组内按照姓名进行排序。

    • 首先,我们定义一个Student类表示学生对象:

public class Student {
    int num;
    String name;
    int age;

    public Student(int num, String name, int age) {
        this.num = num;
        this.name = name;
        this.age = age;
    }

    public int getNum() {
        return num;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "num=" + num +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class Stream3 {
    public static void main(String[] args) {
        ArrayList<Student> arrayList=new ArrayList<>();
         Student s1=new Student(101,"张三",18);
        Student s2=new Student(102,"李四",19);
        Student s3=new Student(103,"王五",17);
        Student s4=new Student(104,"曲艺",20);
        arrayList.add(s1);
        arrayList.add(s2);
        arrayList.add(s3);
        arrayList.add(s4);

       List<Student> lis= arrayList.stream().sorted((stu1,stu)->{
            return stu1.getNum()-stu.getNum();
        }).collect(Collectors.toList());
        System.out.println(lis);

      List<Student> li= arrayList.stream().filter((stu2)->{
            return stu2.getAge()>18;
        }).collect(Collectors.toList());
        System.out.println(li);

        Object a[]= arrayList.stream().map(Student::getNum).toArray();
        System.out.println(Arrays.toString(a));


    }

}

结果如图所示:

6.Maven(项目编译打包软件)
6.1什么是Maven

Maven 是 Apache 软件基金会组织维护的一款专门为 Java 项目提供构建和依赖管理支持的工具。

一个 Maven 工程有约定的目录结构,约定的目录结构对于 Maven 实现自动化构建而言是必不可少的一环,就拿自动编译来说,Maven 必须 能找到 Java 源文件,下一步才能编译,而编译之后也必须有一个准确的位置保持编译得到的字节码文件。 我们在开发中如果需要让第三方工具或框架知道我们自己创建的资源在哪,那么基本上就是两种方式:

通过配置的形式明确告诉它
基于第三方工具或框架的约定 Maven 对工程目录结构的要求。

6.2为什么要使用Maven

原先不使用Maven,java中原来连接数据库必须要自己手动加入相关的包,否则无法连接数据库,有了Maven则不需要手动导入,

如图:

自己手动导入数据库包

使用Maven后则不需要手动导入,只需要提供相关的包地址,Maven就会自动下载,及下载相关的依赖关系。

如图:

6.3Maven 中的相关概念
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.
6.4 Maven 开发环境配置

1.通过官网Apache下载Maven

下载地址:Maven – 下载 Apache Maven

2. 配置环境变量

Maven 是一个用 Java 语言开发的程序,它必须基于 JDK 来运行,需要通过 JAVA_HOME 来找到 JDK 的安装位置。

首先点击此电脑,选择属性,进入系统信息选择高级系统设计,出现环境变量选项,点击环境变量,找到系统变量里的path选项,点击Path,点击新建,找到安装Maven的地址,复制到bin目录,将该地址粘贴到path新建的地方,

,在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>

3. 创建模块工程

image-20220531161702343

image-20220531161801726

image-20220531161912958

然后可以再工程的 pom 文件中看到:

将需要的地址配置到两个<projiect> 之间

上述位置出现如图所示自己所要配置的包则配置成功。

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

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

相关文章

Android应用开发之AndroidManifest.xml

一.AndroidManifest.xml介绍 1.定义 AndroidManifest官方解释是应用清单&#xff08;manifest意思是货单&#xff09;&#xff0c;每个应用的根目录中都必须包含一个&#xff0c;并且文件名必须一模一样。 它是Android程序的全局配置文件&#xff0c;是每个 android程序中必须…

Java入门基础学习笔记45——String使用的注意事项

String使用时的注意事项&#xff1a; 1&#xff09;String对象的内容不可改变&#xff0c;被称为不可变字符串对象。 Strings are constant; their values cannot be changed after they are created. String buffers support mutable strings. Because String objects are im…

最新百度专用站群seo官网程序源码二级泛程序

发布站专用站群SEO推广网站源码支持泛解析无限扩张功能&#xff1a; 1、支持伪静态功能&#xff0c;减少生成静态页增加网站内容&#xff0c;比动态网站更有利于网站收录。 2、支持百度seo优化效果&#xff0c;主动提交百度收录&#xff0c;可生成sitemap.xml文件提交百度减少…

企业内网终端监控管理软件有哪些?推荐4款企业终端监控管理软件

企业内网终端监控管理软件是一种专为企业内部网络设计的安全与管理工具&#xff0c;旨在帮助企业管理、监控和保护其内部网络中的各种终端设备&#xff0c;如个人电脑、笔记本、移动设备等。 这类软件的主要功能包括但不限于以下几个方面&#xff1a; 1&#xff0c;实时监控&a…

总结常见漏洞的代码审计方法

前言 这篇文章主要是总结一下在安全工作中常见漏洞的代码审计方法&#xff0c;以及修复方案&#xff0c;希望能对初学代码审计小伙伴们有所帮助&#xff0c;笔芯♥️ 代码审计的思路 通常做代码审计都是检查敏感函数的参数&#xff0c;然后回溯变量&#xff0c;判断变量是否可…

探索Solana链上DApp开发:高性能区块链生态的新机遇

Solana 是一个新兴的区块链平台&#xff0c;致力于为 DApp&#xff08;去中心化应用程序&#xff09;开发者提供高性能、低成本的解决方案。Solana 的独特之处在于其创新性的共识机制和高吞吐量的网络&#xff0c;使得开发者可以构建高度可扩展的 DApp&#xff0c;并为用户提供…

如何在Python 中如何导入和引用外部文件(Colab VS Code)

1. 上传文件 在 Google Colab 中&#xff0c;从左侧界面的文件选项中使用 "Upload" 按钮上传文件。 在 VS Code 中&#xff0c;通过菜单栏中的 "File" -> "Open File/Folder" 选项上传文件&#xff08;建议将所有文件放入一个文件夹中&#…

Linux--进程间通信(2)(有名管道)

目录 1.原理 2.创建命名管道 3.使用命名通道实现简单的通信 4.使用创建的命名管道 1.原理 匿名管道没有名称&#xff0c;它们是通过句柄在父进程和子进程之间传递的。这意味着匿名管道只能用于具有父子关系的进程之间。 但如果程序之间没关系&#xff0c;那么这时候就要用…

向传音手机学习产品市场定位与产品需求定义

2024 年第一季度全球智能手机发货量同比增长 11%&#xff0c;排在第一名的是三星&#xff0c;占比 21%&#xff0c;苹果占比 17% 排在第二位&#xff0c;小米 14%排在第三名&#xff0c;传音手机10% 排在第四位&#xff0c;OPPO为 9% 排在第五名。 「非洲之王」传音手机表现十…

增强创作者能力:The Sandbox 首届 “创作者挑战” 回顾

首届 "创作者挑战" 为创作者在平台上赚取收入提供了难得机会。 我们发起 “创作者挑战” 的目的是支持创作者&#xff0c;赋予他们构建元宇宙的能力。我们提出三大行动号召&#xff1a;发布、参与和赚钱。新推出的「参与奖池」&#xff08;Engagement Pool&#xff0…

灵动微单片机洗衣机方案——【软硬件开发支持】

RAMSUN英尚以洗衣机洗涤主驱电机为例&#xff0c;主驱电机和多电机控制首选MM32SPIN0280.灵动微电子能够提供完整的软硬件开发支持&#xff0c;目前方案已经在主流家电厂出货。 洗衣机方案 皮带洗衣机 DD直驱洗衣机 波轮洗衣机 Mini壁挂和桌面洗衣机 洗涤烘干双变频方案 热泵烘…

【机器学习】利用机器学习优化陆军战术决策与战场态势感知

&#x1f512;文章目录&#xff1a; &#x1f4a5;1.引言 &#x1f6f4;2.机器学习在陆军战术决策中的应用 &#x1f6e3;️2.1数据收集与预处理 &#x1f304;2.2模型构建与训练&#xff1a; &#x1f305;2.3实时决策支持&#xff1a; &#x1f305;2.4代码实现 &…

C++学习日记 | LAB 6 static library 静态库

资料来源&#xff1a;南科大 余仕琪 C/C Program Design LINK&#xff1a;CPP/week06 at main ShiqiYu/CPP GitHub 一、本节内容 本节主要介绍静态库和动态库。 1.1 静态库和动态库的概念 静态链接和静态库(也称为存档)是链接器将所有使用的库函数复制到可执行文件的结果。静…

2024儿科常用心理评估量表汇总,附详细操作步骤与评定标准

在社会的快速发展以及家庭教育模式的转变下&#xff0c;儿童心理健康问题正逐步成为公众瞩目的焦点。焦虑症、抑郁症、适应障碍等儿科常见的症状&#xff0c;不仅对孩子的身心健康构成威胁&#xff0c;更可能在他们的学习旅程和社交互动中制造重重障碍。 儿科医师常用评估量表…

联想打印APP添加打印机方法

联想打印APP添加打印机操作方法&#xff1a; 1、在手机上下载“联想打印”APP&#xff1b; 2、打开“联想打印”APP,然后在软件内右下角找到“我的”图标并选择&#xff1b; 3、点击“请登录/注册”&#xff1b; 4、勾选“我已阅读并同意”然后在上面填写手机号码后&#xff0…

H6246 60V降压3.3V稳压芯片 60V降压5V稳压芯片IC 60V降压12V稳压芯片

H6246降压稳压芯片是一款电源管理芯片&#xff0c;为高压输入、低压输出的应用设计。以下是对该产品的详细分析&#xff1a; 一、产品优势 宽电压输入范围&#xff1a;H6246支持8V至48V的宽电压输入范围&#xff0c;使其能够适应多种不同的电源环境&#xff0c;增强了产品的通用…

WMS仓库管理系统是怎么操作的?WMS操作流程详解

WMS 是仓库管理系统(Warehouse Management System) 的缩写。通过标准化的来料管理、拣配管理、仓库管理&#xff0c;打造实时化、透明化、可视化的仓储管理体系。一款合格的wms系统具有以下优势 提供实时可视性和自动化仓储流程&#xff0c;帮助企业更好地应对复杂的供应链网络…

多张图片上传、图片回显、url路径转成File文件

1. 实现 背景&#xff1a;在表单中使用element-plus实现多张图片上传(限制最多10张)&#xff0c;因为还要与其他参数一起上传&#xff0c;所以使用formData格式。 编辑表单回显时得到的是图片路径数组&#xff0c;上传的格式是File&#xff0c;所以要进行一次转换。 <tem…

IDEA提示Untrusted Server‘s certificate

如果你用的是Intellij系列IDE&#xff08;GoLand, PHPStorm, WebStorm, IDEA&#xff09;&#xff0c;突然弹出个提示『Untrusted Servers certificate 』 莫慌&#xff0c;这是因为你用了破解版的 IDE&#xff0c;破解过程中有个hosts绑定的操作&#xff1a; 0.0.0.0 account.…

智慧农田视频监控技术应用:智能监管引领农业新时代

据新闻报道&#xff0c;5月24日合肥市公安局接到群众报警&#xff0c;反映自己辛苦种植的小麦有几十亩地被人偷偷用收割机盗割。公安机关迅速出警并立案侦查&#xff0c;通过查看监控视频得知&#xff0c;用户所在的公司租用了几千亩土地进行农业种植&#xff0c;因公司与村民之…