JAVA-Lambda
lambda 本质是‘语法糖’。
匿名函数 为了简化JAVA中的匿名内部类
事件监听 写一个类 实现 ActionListener接口。
内部类: 类在其他地方都用不到,索性将这个类定义在类的内部使用。
好处:1.内部可以使用外部类成员
2.其他地方发现不了
往往内部类只用一次,还需要创建一个内部类,麻烦。
JAVA为了简化语法,new 接口/抽象类,创建了一个匿名的类的对象。
lambda是匿名函数,把函数当做参数一样传递。
底层编译器将语法转化为常规代码。
lambda是一个“语法糖”,就是名词,某种语法可以简化开发称为语法糖。
装箱 拆箱
自动类型转换
泛型
使用lambda接口中必须只能有一个抽象方法。
JAVA8—stream
处理数据集合(数组,集合类)。
对数组,集合类 进行各种操作(过滤,排序...)
Stream是JAVA8新特性,可以把它视为遍历数据集的高级迭代器。
stream处理数据的大体过程:
1.获取 数据/集合类 —>2.转化为stream流对象
—> 3.对流进行各种操作(排序,过滤)
—> 4.将流转化为数据/集合类 的 结果(集合类/数组)
数据集合类更偏向于存储数据(各种结构)
流
Io流:输入输出文件内容
Stream流: 更偏向于数据操作
流中有个forEach()方法。
中间操作的方法:
filter():过滤某些元素
sorted():自然排序,流中元素需实现Comparable接口
distinct:去除重复元素
limit(n): 获取n个元素
skip(n):跳过n个元素,配合limit(n)可实现分页。
map():将对象中某个属性的值映射到一个新的元素中
Integer [] array =new Integer[]{1,2,3,4,2,8,5,4,6,8,9,7};
Arrays.stream(array)
//寻找小于5的元素
//传入参数e,返回符合{}中的条件的e
.filter(
(e)->{ return e<5;}
)
.forEach(e->{
System.out.println(e);
});
System.out.println("****************************************************");
Arrays.stream(array)
//传入两个参数,自然排序为(o1-o2),逆序排序为(o2-o1)
.sorted(
(o1,o2) -> { return o1-o2;}
)
.distinct()//去重复元素
//for循环输出
.forEach(e->{
System.out.println(e);
});
System.out.println("****************************************************");
Arrays.stream(array)
.sorted()
.distinct()
.skip(2)//跳过(n)个元素
.limit(2)//获取(n)个元素
.forEach(e->{
System.out.println(e);
});
// map()
System.out.println("***************************************************");
Object[] a= array.stream()
//获取数据对象中的id元素,映射到一个新的元素中
.map(Student::getId)
.toArray();
System.out.println(Arrays.toString(a));
System.out.println("***************************************************");
Map<Integer,String>map= array.stream()
.collect(Collectors.toMap(Student::getId,Student::getName));
System.out.println(map);
最终操作:
forEach: 遍历流中的元素
toArray:将流中的元素倒入一个数组
Min:返回流中元素最小值
Max:返回流中元素最大值
count:返回流中元素的总个数
Reduce:所有元素求和
anyMatch:接收一个 Predicate 函数,只要流中有一个元素满足条件则返 回 true,否则返回 false
allMatch:接收一个 Predicate 函数,当流中每个元素都符合条件时才返 回 true,否则返回 false
findFirst:返回流中第一个元素
collect:将流中的元素倒入一个集合,Collection 或 Map
Predicate 函数:()->{return ;}
Integer [] array =new Integer[]{7,1,2,3,4,5,6,2};
Integer integer= Arrays.stream(array)
.distinct()//排序
//返回数据中最大的元素
.max((o1,o2)->{
return o1-o2;
}).get();
System.out.println(integer);
//当返回的数据类型与原来数据/集合类的元素数据相同的话,需要用get()方法获取元素后,在返回数据;
System.out.println("*********************************************************");
long i =Arrays.stream(array)
.count();//返回一个数据中元素数量的总和
System.out.println(i);
System.out.println("*********************************************************");
Integer integer1=Arrays.stream(array)
.distinct()
//求数据中所有元素的和
.reduce((o1,o2)->{
return o1+o2;
}).get();
System.out.println(integer1);
System.out.println("*********************************************************");
boolean flag= Arrays.stream(array)
.distinct()
//判断数据中的元素是否有一个元素符合Predicate 函数的条件,如果符合返回true,反之返回false。
.anyMatch((e)->{
return e>=5;
});
System.out.println(flag);
//当返回的数据类型与原来数据/集合类的元素数据不同的话,直接返回;
System.out.println("*********************************************************");
Integer i3=Arrays.stream(array)
//查询数据中第一个出现的元素
.findFirst().get();
System.out.println(i3);
//collect()
Student s1=new Student(101,"张三1",16);
Student s2=new Student(102,"张三2",15);
Student s3=new Student(103,"张三3",18);
Student s4=new Student(104,"张三4",19);
Student s5=new Student(105,"张三5",25);
ArrayList<Student> array=new ArrayList<>();
array.add(s1);
array.add(s2);
array.add(s3);
array.add(s4);
array.add(s5);
/*
因为sorted()无法找到排序的条件,无法排序,会报错
Student s= array.stream()
.sorted()
.findFirst().get();
System.out.println(s);
*/
List<Student> list = array.stream()
.sorted((stu1,stu2)->{
return stu1.getId()-stu2.getId();
})
.collect(Collectors.toList());
System.out.println(list);
System.out.println("***************************************************");
Object[] a= array.stream()
.map(Student::getId)
.toArray();
System.out.println(Arrays.toString(a));
System.out.println("***************************************************");
List list1= array.stream()
.map(Student::getId)
.collect(Collectors.toList());
System.out.println(list1);
System.out.println("***************************************************");
Map<Integer,String>map= array.stream()
.collect(Collectors.toMap(Student::getId,Student::getName));
System.out.println(map);
Maven
Maven是apache软件基金会的一个开源项目。
apache软件基金会(国外一个,专门维护开源项目的组织)
Maven是一个优秀的项目构建(项目管理)工具。
具体表现为:
1.管理项目中依赖的jar文件,以及jar文件之间的依赖关系(在A.jar文件中,使用到了B.jar)。
2.可以完成项目的测试,编译(将.java文件-->.class文件),打包(源代码->.jar文件)等工作。
Maven如何管理项目中依赖的jar文件?
Maven将常用的jar收集起来,在他的服务器上存储。
每个jar都有一个独一无二的地址。
我们在开发期间,只需要将jar包的地址配置在项目配置文件中即可。
借助maven就可以自动去官网下载jar文件到本地。
maven管理的项目根目录下,都有一个pom.xml文件
在pom.xml文件中指示maven如何工作(配置项目版本,编译选项,jar的坐标)
坐标:
jar包在maven仓库中的唯一地址
中央仓库(全球共享唯一的)
中央仓库镜像(阿里云镜像)多个
本地仓库
在项目中使用jar的时候,首先会从本地仓库中寻找,就会从中央仓库镜像/中央仓库中下载。
Maven开发环境搭建:
前提条件:
安装 jdk
网络连接正常
安装:
解压安装包到指定位置
将bin目录的地址复制后,在系统环境变量path创建相应的