Stream流 【重点】
File类 【重点】
Stream流 【重点】
体验Stream流
好处:简化数组和集合操作的代码
按照下面的要求完成集合的创建和遍历
创建一个集合,存储多个字符串元素
把集合中所有以"张"开头的元素存储到一个新的集合
把"张"开头的集合中的长度为3的元素存储到一个新的集合
遍历上一步得到的集合
"张三丰","张无忌","张翠山","王二麻子","张良","谢广坤"
Stream流的概述
什么是Stream流
JDK8.0之后的新特性,是一种用于简化数组和集合操作的技术
Stream流操作数据的思想类似于生成流水线,分成很多的步骤,
一步步往下执行最终满足需求要求的操作
Stream的特点
生成流水线是依次从前往后进行的,不能回头
Stream流在操作的时候也不能回头只能往前(一个Stream流对象只能使用一次)
Stream流的操作步骤:
1、获取方法 将源数据(数组或者集合)转为Stream流对象
2、流操作的方法
中间方法:方法返回值还是Stream类型
终结方法:方法返回值不是Stream类型
3、收集方法 将Stream流对象转为源数据(数组或者集合)
获取方法
集合 ->Stream流对象
单列集合
Collection接口中的方法:
default Stream
// List集合转Stream流对象
Stream
// Set集合转Stream流对象
Stream
双列集合
无法直接转换为Stream流对象的
可以间接转换,即先转换为单列集合,然后转换为Stream流对象
// 获取所有的键转为Set集合
Set
Stream
// 获取所有的键值对对象转为Set集合
Set
Stream
// 获取所有的值转为Set集合
Collection
Stream
数组 ->Stream流对象
Arrays类中的(第一种方式)
static
Stream接口中的(第二种方式)
static
大部分情况下,这两种方式都可以,随便选择一种,但是对于基本类型的数组(比如:int[]等)
转为Stream流的时候,选择第一种方式
流操作的方法
中间方法:方法返回值还是Stream类型
Stream
Stream
Stream
Stream
static
终结方法:方法返回值不是Stream类型
long count():统计流中数据的个数
void forEach(Consumer action):遍历
收集方法
流的操作不会影响源数据(数组或者集合)中的数据
数组
Stream接口中的方法:
Object[] toArray()
A[] toArray(IntFunction generator)
集合
Stream接口中的方法:
R collect(Collector super T,A,R> collector)
单列集合
List集合
stream.collect(Collectors.toList())
Set集合
stream.collect(Collectors.toSet())
双列集合
Map集合
stream.collect(Collectors.toMap(Function keyMapper,Function valueMapper))
Collector toMap(Function keyMapper,Function valueMapper)
* 第一个Function用于将流中的数据生成键的规则
* 第二个Function用于将流中的数据生成值的规则
进行两个转换
创建一个ArrayList集合,并添加以下字符串。字符串中前面是姓名,后面是年龄
"zhangsan,23"
"lisi,24"
"wangwu,25"
保留年龄大于等于24岁的人,并将结果收集到Map集合中,姓名为键,年龄为值
File类 【重点】
File类概述
什么是File类
用于封装文件和文件夹的类,可以让我们通过Java来操作文件和文件夹(目录)
注意事项:
1、File既可以封装文件也可以封装文件夹
2、要表示封装的文件或者文件夹,需要使用全限定名(除非编写的是相对路径)
3、封装的文件或者文件夹可以存储也可以不存在
学习File类其实就是在学习API:
1、导包
2、创建对象
3、调用方法
构造方法
public File(String pathname)
* 参数:
String pathname:路径的全限定名
public File(String parent, String child)
* 参数:
String parent:父路径
String child:子路径
public File(File parent, String child)
* 参数:
File parent:父路径
String child:子路径
创建对象格式:
类名 对象名 = new 构造方法(实参);
File类中的常用方法
创建
boolean createNewFile():创建一个指定名称的空的新文件
boolean mkdir():创建文件夹,只能创建单级文件夹
boolean mkdirs():创建文件夹,既可以创建单级也可以创建多级文件夹 [推荐]
删除
boolean delete()
1、删除不走回收站,删除必须非常小心
2、既可以删除文件,也可以删除文件夹
3、只能删除空文件夹
判断
boolean exists():判断文件或者文件夹是否存在
boolean isFile():判断是否是文件
boolean isDirectory():判断是否是文件夹
isFile和isDirectory方法是互斥的,一个为true,则另一为false,但是前提
是文件或者文件夹是存在的,如果不存在,则都为false。
获取
掌握
String getName():获取文件或者文件夹名称,文件名会带后缀名
String getPath():获取路径,传递的是相对路径就获取相对路径,传递的绝对路径就获取绝对路径
long length():获取文件的字节大小,不能获取文件夹
File[] listFiles():获取当前文件夹下的所有的文件和子文件夹,存储到File数组中
//进入文件夹,获取这个文件夹里面所有的文件和子文件夹的File对象,并把这些File对象都放在一个数组中返回.
//包括隐藏文件和隐藏文件夹都可以获取.
//注意事项:
//1.当调用者是一个文件时, 会返回null
//2,当调用者是一个空文件夹时 会返回空数组
//3.当调用者是一个有内容的文件夹时 返回File对象数组
//4.当调用者是一个有权限才能进入的文件夹时 会返回null
//5.当调用者是不存在的文件夹时 会返回null
了解
File getAbsoluteFile():获取绝对路径
String getAbsolutePath():获取绝对路径
String toString():等价于getPath()方法,获取路径,传递的是相对路径就获取相对路径,传递的绝对路径就获取绝对路径
long lastModified():获取最后的修改时间,毫秒值
绝对路径和相对路径
绝对路径:是一个以盘符开始的路径,是一个完整路径
E:\temp\爱笑的眼睛.mp3
相对路径:不以盘符开始的路径,省略(简化)的路径
temp\\a.txt
爱笑的眼睛.mp3
有一个参照的路径,在IO流中相对路径相对的(参照的)是项目的根路径,
所以我们写了一个相对路径,默认前面加上项目根路径才是这个路径的完整路径
-> 项目根路径\爱笑的眼睛.mp3
->D:\develop\idea2021.2\workspace\javase2\爱笑的眼睛.mp3
是否所有的路径都可以写成相对路径?
不是的,只有项目下的文件或者文件夹的路径才可以写出相对路径