lambda语法,java8Stream流,maven

news2025/1/11 6:05:08

lambda语法

Arraylist排序

ArrayList<Integer> a = new ArrayList();
        a.add(1);
        a.add(2);
        a.add(3);

        a.sort(new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o1-o2;//对集合a中数据进行升序排序
            }
        });

但是这样的书写还是有一些复杂,于是就有了一种更简单的写法。

ArrayList<Integer> a = new ArrayList();
        a.add(4);
        a.add(2);
        a.add(3);

        a.sort((o1,o2)->{
            return o1-o2;//使用了lambda表达式,与上段代码一样
        });
        System.out.println(a);

 什么是lambda表达式

Lambda表达式是一种匿名函数,通常用于简化代码、实现小型函数而不需要定义完整的函数。

lambda也是一种语法糖,语法糖(Syntactic Sugar)指的是一种语言设计特性,允许程序员以更简洁、易读的方式编写代码。其实质上,它不增加语言的功能,只是提供了一种更方便的语法,使得程序员的编写和理解更加轻松。

使用lamdba表达式要求
一个抽象类或者接口里面只能有一个方法
@FunctionalInterface添加了这个注解的抽象类只能有一个抽象方法
匿名函数,把函数当作参数一样传递
lambda函数怎么使用,使用arraylist排序来举例

 在这个Comparator接口里面只有一个compare方法,里面传入了两个参数,要使用lambda的要求就是一个抽象类或者接口里面只能有一个方法,因为arraylist排序方法里面要传入一个Comparator接口,new 一个对象可以直接重写,但是使用lambda表达式就十分简单,只需(o1,o2)->{},其中o1,o2是传进的参数,{}里面可以直接重写方法,和上面的案例一样。

java8Stream流

我们之前所学的IO流是在文件上面进行输入输出,我们现在所说的这个流是在数组和集合的基础上进行操作的。

处理数据集合(数组,集合)
对数组,集合进行各种操作(过滤,排序.....)


Stream 处理数据大体过程

数组/集合 --> 流 --各种操作(排序,过滤)--> 结果(数组,集合类)

如何获取数组和集合的流

ArrayList<Integer> a1 = new ArrayList<>();
        a1.add(1);
        a1.add(5);
        a1.add(3);
        a1.add(4);
        Stream<Integer> stream = a1.stream();//集合获取流的方式

 Integer[] a2 = new Integer[]{1,2,3,4,5};
        Stream<Integer> stream1 = Arrays.stream(a2);//数组获得流的方式

Stream<Integer> integerStream = Stream.of(1, 2, 3, 4, 5, 6);//获得流

流的操作

分为中间操作(流的各种处理)和终端操作(把流转化为最终结果)

中间操作:filter:过滤流中的某些元素,
sorted(): 自然排序,流中元素需实现 Comparable 接口
distinct: 去除重复元素
limit(n): 获取 n 个元素
skip(n): 跳过 n 元素,配合 limit(n)可实现分页
map(): 将其映射成一个新的元素
 

ArrayList<Integer> a1 = new ArrayList<>();
        a1.add(1);
        a1.add(5);
        a1.add(3);
        a1.add(4);
        a1.add(3);
        a1.add(4);
        a1.add(2);
        Stream<Integer> stream = a1.stream();//集合获取流的方式
        a1.stream().filter((e)->{
            return e>1;//过滤集合中大于1的
        }).sorted()//升序排序
                .distinct()//去除重复元素
                .skip(2)//跳过两个元素
                .limit(2)//限制输出元素
                .forEach((e)->{//我们这里就使用了lambda表达式
            System.out.println(e); //集合遍历
        });

终端操作
forEach: 遍历流中的元素
toArray:将流中的元素倒入一个数组
Min:返回流中元素最小值
Max:返回流中元素最大值
count:返回流中元素的总个数
Reduce:所有元素求和
anyMatch:接收一个 Predicate 函数,只要流中有一个元素满足条件则返
回 true,否则返回 false
allMatch:接收一个 Predicate 函数,当流中每个元素都符合条件时才返
回 true,否则返回 false
findFirst:返回流中第一个元素
collect:将流中的元素倒入一个集合,Collection 或 Map

Integer i = a1.stream().distinct()
//                .findFirst().get();//返回第一个元素
//        System.out.println(i);


//        boolean b = a1.stream().distinct()
//                .anyMatch((e) -> {
//                    return e > 2;//有一个元素满足条件返回true,allMatch所有条件满足返回true否则返回false
//                });
//        System.out.println(b);


//        Integer i = a1.stream().distinct()
//                .reduce((o1, o2) -> {
//                    return o1 + o2;//流中所有元素相加
//                }).get();
//        System.out.println(i);


//        long count = a1.stream().distinct()
//                .count();//计算流中数据个数,为long类型
//        System.out.println(count);

//        Integer i = a1.stream().distinct()
//                .min((o1, o2) -> {
//                    return o1 - o2;//最小值min方法将数据包装在一个类中需要调用get方法返回数据,max也一样
//                }).get();
//        System.out.println(i);


//        a1.stream().distinct()
//                .forEach((e)->{
//                    System.out.println(e);//元素遍历
//                });

 

将整数换成student对象
 student s1 =new student(1,"张三1",18);
        student s2 =new student(2,"张三2",19);
        student s4 =new student(3,"张三4",20);
        student s3 =new student(4,"张三3",21);
        student s6 =new student(5,"张三6",22);
        ArrayList<student> a = new ArrayList<>();
        a.add(s1);
        a.add(s2);
        a.add(s3);
        a.add(s4);
        a.add(s6);
//        Map<Integer, String> collect = a.stream()
//                .collect(Collectors.toMap(student::getId, student::getName));//将对象中的属性的值映射到一个新的集合中去也是lambda表达式
//        System.out.println(collect);


//        List<student> collect = a.stream().sorted((o1, o2) -> {
//            return o1.getAge() - o2.getAge();//用年龄排序
//        }).collect(Collectors.toList());//将流转换为list集合
//        System.out.println(collect);


//        List<Integer> collect = a.stream().map(student::getId)//将对象中某个属性的值映射到一个新的集合中去
//                .collect(Collectors.toList());
//        System.out.println(collect);

maven

概述

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

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.在使用的时候会先在本地仓库查找,如果没有会在中央仓库查找并且下载,我们一般都会使用中央仓库镜像来下载,这样会快一点。

maven开发环境搭建

前提安装jdk,需要网络
解压安装包到指定位置

maven下载地址:http:// maven .apache. org
将bin目录的地址配置到环境变量path中


在命令行测试  mvn -version,如果输出以下信息则说明安装成功

如果有问题建议在系统变量中添加一个JAVA_HOME,将jdk的根目录复制进去。

 修改maven配置文件

打开maven包所放位置,打开找到里面的conf文件夹,先将settings备份一份以免修改错了。

打开settings,大家看视频修改一下。

在idea中设置maven

 创建一个maven项目

 

依赖关系

 maven仓库官网

http://mvnrepository.com

maven命令

clean:删除编译的 target

compile 编译

package 打包​

 

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

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

相关文章

JavaEE: 进程和线程

文章目录 进程线程的概念和区别总结如何创建线程1.继承Thread重写run2.实现Runnable重写run3.继承Thread重写run,通过匿名内部类来实现4. 实现Runnable重写run,通过匿名内部类来实现5.基于lambda表达式来创建 虚拟线程 并发编程: 通过写特殊的代码&#xff0c;把多个CPU核心都利…

Leetcode力扣刷题——182.查找重复的电子邮箱

题目 编写解决方案来报告所有重复的电子邮件。 请注意&#xff0c;可以保证电子邮件字段不为 NULL。 以 任意顺序 返回结果表。 结果格式如下例。 结果 # Write your MySQL query statement below select Email from Person group by email having count(*)>1; 知识点 c…

Java 抽象知识笔记总结(油管)

Java系列文章目录 Java Optional 容器笔记总结 文章目录 Java系列文章目录一、前言二、学习内容&#xff1a;三、问题描述四、解决方案&#xff1a;4.1 抽象类的使用4.2 抽象类与接口的区别4.2.1 接口复习4.2.2 具体区别4.2.3 使用场景4.2.3.1 抽象类使用场景4.2.3.2 接口使用…

读零信任网络:在不可信网络中构建安全系统11用户组的认证和授权

1. 用户组的认证和授权 1.1. 几乎在每个系统中都有一小部分操作需要被密切关注 1.1.1. 每个应用对这部分操作的风险容忍度各有不同&#xff0c;且没有任何下限 1.1.2. 一部分风险是由用户个人的可信度决定的 1.1.2.1. 单个用户的可信度可能很低 1.1.2.2. 多个用户组合的可信…

OpenAI人事变动:联合创始人John Schulman离职加入Anthropic

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

【JVM基础14】——垃圾回收-强引用、软引用、弱引用、虚引用的区别

目录 1- 引言&#xff1a;为什么分多种引用类型2- ⭐核心&#xff1a;2-1 强引用2-2 软引用2-3 弱引用2-4 虚引用 3- 小结&#xff1a;3-1 强引用、软引用、弱引用、虚引用的区别&#xff1f; 1- 引言&#xff1a;为什么分多种引用类型 在 Java 中&#xff0c;引用类型被分为强…

ICM-20948芯片详解(8)

接前一篇文章&#xff1a;ICM-20948芯片详解&#xff08;7&#xff09; 六、寄存器详解 1. 总述 ICM-20948共有user bank 0~3共4组寄存器。 USER BANK 0寄存器图 USER BANK 0所包含的寄存器如下图所示&#xff1a; USER BANK 1寄存器图 USER BANK 1所包含的寄存器如下图所…

校园外卖微信小程序的设计与实现

校园外卖微信小程序的设计与实现 校园外卖微信小程序的设计与实现 [摘要] 随着社会的进步和生活质量的提高&#xff0c;人们对用餐体验有了更高的要求&#xff0c;导致电话和网上订餐服务日益发展。这一趋势也推动了以大学生为主要服务对象的校园外卖的发展。此次设计主要为大…

AI大模型巡游记第二回探索幻梦

unsetunset第二回&#xff1a;探索幻梦unsetunset **随着夕阳西下&#xff0c;李逸结束了今天的探险之旅…… 李逸回到了现实世界&#xff0c;心中满是对“幻境大模型”体验的好奇与惊叹。他迫不及待地想要了解更多关于这项技术背后的秘密。于是&#xff0c;他决定访问“幻梦”…

Python写UI自动化--playwright(元素焦点的控制)

在UI测试中会遇到一种情况&#xff0c;在输入框输入内容&#xff0c;鼠标焦点离开输入框后&#xff0c;前端会对输入框内容进行判断是否合法&#xff0c;比如输入不正确格式的账号&#xff0c;会有相应的提示。该篇文章就讲一讲playwright关于元素焦点的控制&#xff1a; Play…

Makefile基础语法 看这一篇就够了

Makefile 基础语法 Makefile 是一种用于自动化构建过程的脚本文件&#xff0c;它通过定义目标文件和依赖关系来告诉 make 工具如何构建项目。Makefile 的语法和结构可以非常灵活&#xff0c;适用于各种复杂的构建场景。本教程将详细介绍 Makefile 的基本概念、语法以及如何编写…

python3 pyside6图形库学习笔记及实践(五)

目录 前言选项卡(QTabWidget)创建选项卡常用属性和方法常用信号 堆叠页面(QStackedWidget)创建堆叠容器切换页面过渡动画 前言 本系列文章为b站PySide6教程以及官方文档的学习笔记 原视频传送门&#xff1a;【已完结】PySide6百炼成真&#xff0c;带你系统性入门Qt 官方文档…

Linux云计算 |【第二阶段】CLUSTER-DAY3

主要内容&#xff1a; Ceph概述、部署Ceph集群、Ceph块存储 一、分布式存储基础 分布式系统&#xff08;Distributed File System&#xff09;是由一组通过网络进行通信、为了完成共同的任务而协调工作的计算机节点组成的系统。文件系统管理的物理存储资源不一定直接连接在本…

ClickHouse:单机安装

目录 一、ClickHouse介绍 二、安装ClickHouse 2.1安装要求 2.2单机安装 2.3修改配置文件(可选) 2.4升级软件 三、使用ClickHouse 3.1连接ClickHouse 3.2 执行SQL 一、ClickHouse介绍 ClickHouse是由Yandex开源的一个高性能、面向列的SQL数据库管理系统&#xff08;DBM…

【踩坑】pytorch中的索引与copy_结合不会复制数据及其解决方案

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 目录 背景知识 实验验证 结论分析 错误案例 处理方法 注意事项 附加说明 基本索引返回视图 高级索引返回副本 赋值操作都是原地操作 以下内容…

SS9283403 sqlite3交叉编译并部署到SS928(六)

1.Sqlite3下载 连接&#xff1a;SQLite Download Page 2.解压 tar zxvf sqlite-autoconf-3460000.tar.gz 3.配置并编译 进入解压目录&#xff0c;打开命令行&#xff0c;输入如下命令 ./configure CCaarch64-mix210-linux-gcc --hostarm-linux --prefix/home/mc/work/sqlite…

002发那科ROBOGUIDE仿真导入模型

打开已经创建好的工程&#xff0c;找到“机器” 右键&#xff0c;添加机器->CAD文件(F) 找到本地的3D模型&#xff0c;然后点击&#xff0c;打开 设置模型位置[0,0,0,0,0,0] 然后就导入进来啦

对比速览 | Alluxio 企业版 v.s. 社区版

当前诸多企业面临着日益增长的数据量和复杂的数据管理挑战。特别是在模型训练的过程中&#xff0c;诸如GPU短缺、GPU利用率不高等问题已经成为许多企业在技术实施中面临的挑战。同时&#xff0c;大数据分析中跨云数据访问速度慢、成本高等问题也给企业带来了痛点。为了应对这些…

redolog和binlog的两阶段提交和区别

redolog和binlog区别 redo log 是 InnoDB 引擎特有的&#xff1b;binlog 是 MySQL 的 Server 层实现的&#xff0c;所有引擎都可以使用。redo log 是物理日志&#xff0c;记录的是“在某个数据页上做了什么修改”&#xff1b;binlog 是逻辑日志&#xff0c;记录的是这个语句的…

Shell编程 --函数语法与重定向

文章目录 Shell编程shell函数语法函数参数 Shell 输入/输出重定向输出重定向输入重定向重定向深入讲解/dev/null 文件 总结 Shell编程 Shell是一种程序设计语言。作为命令语言&#xff0c;它交互式解释和执行用户输入的命令或者自动地解释和执行预先设定好的一连串的命令&…