一、Stream流
1.1认识Stream
也叫stream流,用作操作数组或集合的数据
优点:stream流大量结合了lambda表达式的语法风格来编写代码,使得代码更简洁、可阅读性更高。
使用步骤:①获取stream流②调用中间方法③调用最终方法
1.2 Stream常用的方法
中间方法
终结方法
收集方法
把stream流收集为List、Set、Map集合(也可以转换为数组)
public class Demo01 {
public static void main(String[] args) {
/*
目标:能够把Stream对应转化 集合 / 数组
*/
//创建学生对象
// 筛选出考试前三面的同学,收集成一个List
Student s1 = new Student("张三",78);
Student s2 = new Student("李四",34);
Student s3 = new Student("王五",64);
Student s4 = new Student("赵六",96);
Student s5 = new Student("老八",89);
ArrayList<Student> list = new ArrayList<>();
Collections.addAll(list,s1,s2,s3,s4,s5);
//收集成List
List<Student> studentList = list.stream().sorted((o2, o1) -> {
return Double.compare(o1.getScore(), o2.getScore());
})
.limit(3)
.collect(Collectors.toList());
System.out.println(studentList);
//收集成set
Set<Student> studentSet = list.stream().sorted((o2, o1) -> {
return Double.compare(o1.getScore(), o2.getScore());
})
.limit(3)
.collect(Collectors.toSet());
System.out.println(studentSet);
//收集成map
//lambda的形式
Map<String, Double> map = list.stream().collect(Collectors.toMap(k -> k.getName(), v -> v.getScore()));
System.out.println(map);
//收集成数组
Object[] array = list.stream().toArray();
System.out.println(Arrays.toString(array));
}
}
二、异常
2.1 了解异常的概念和体系
异常简单来说就是程序出现的问题,分为编译时异常和运行时异常
Error:系统级别异常,sun公司会把这些问题封装成Error对象给出来,说白了,Error是给sun公司自己用的,不是给我们程序员用的,因此我们开发人员不用管它。
Exception:叫异常,它代表的才是我们程序可能出现的问题,所以,我们程序员通常会用Exception以及它的孩子来封装程序出现的问题
2.2 掌握异常处理方式1-try…catch
格式:try {
可能出现异常的代码;
} catch(异常类名 变量名) {
异常的处理代码;
}
必须有try 可以没有catch
如:try{}finally{} 但是catch(异常类名 变量名) {
异常的处理代码;}是错误的写法
异常类名,不记得具体子类的时,可以直接写入Exception
好处:可以让程序继续执行。
try/catch细节
try/catch中有异常的执行流程;try/catch中没有异常的执行流程;try/catch中有多个异常怎么处理;处理异常可以写父类。
Demo
2.3 掌握finally代码块
有一些特定的代码无论异常是否发生,都需要执行。另外,因为异常会引发程序跳转,导致有些语句执行不到。而finally就是解决这个问题的。
在finally代码块中的代码一定会被执行。
格式:try {
可能出现异常的代码;
} catch(异常类名 变量名) {
异常的处理代码;
} finally {
代码;
}
Demo
2.4 掌握异常处理方式2-throws
格式:修饰符 返回值类型 方法名(参数) throws 异常类名1, 异常类名2 { }
当自己无法处理异常的时候,把异常抛出来给被人去解决,表面的异常能够去解决,能通过编译,相当于甩锅。
Demo
2.5 了解自定义异常和使用自定义异常
目的:JDK虽然提供了许多异常,但是并不是所有的异常都会满足我们的需求,这时候根据自己的业务需求自定义异常类,如成绩负数、年纪小于十八等。
步骤:定义类继承Exception或者RuntimeException;编写构造器
Demo
public class UserException extends RuntimeException{
public UserException() {
}
public UserException(String message) {
super(message);
}
}
public class User {
public static void main(String[] args) {
User user = new User();
user.getPassword("22222");
}
public void getPassword(String psd) throws UserException{
if (psd.length() < 6 || psd.length() > 20){
throw new UserException("输入的密码异常");
}
}
}
三、File
3.1 创建对象
可以根据文件的路径去创建文件对象,路径分为绝对路径、相对路径(推荐使用)。
绝对路径:从符盘开始
File file1 = new File(“D:\\itheima\\a.txt”);
相对路径:没有符盘,默认直接到当前工程下的目录寻找文件。
File file3 = new File(“模块名\\a.txt”);
创建格式:File file = new File(相对路径)
File f1 = new File("C:\\Users\\Administrator\\IdeaProjects\\JAVASE\\day08-Stream-Exception-File\\file");
f1.createNewFile();
//相对路径 C:\Users\Administrator\IdeaProjects\JAVASE\day08-Stream-Exception-File\file
System.out.println(f1.getAbsolutePath());
File f2 = new File("day08-Stream-Exception-File\\file");
f2.createNewFile();
System.out.println(f2.getAbsolutePath());
3.2 常用方法1:创建文件、删除文件
创建空文件:public boolean createNewFile()
创建一级文件夹:public boolean mkdir()
创建多级文件夹:public boolean mkdirs()
注意:delete方法默认只能删除文件和空文件夹,删除后的文件不会进入回收站。(慎重操作!!!)
Demo
//创建一个tem文件夹
File f3 = new File("day08-Stream-Exception-File\\file\\tem");
f3.mkdir();
//创建个多级文件夹
File f4 = new File("day08-Stream-Exception-File\\file\\a/b/c");
f4.mkdirs();
//删除tem文件夹
File f5 = new File("day08-Stream-Exception-File\\file\\tem");
3.2 常用方法2:判断文件类型、获取文件信息
方法的具体使用
//判断文件是否存在
File f6 = new File("day08-Stream-Exception-File\\file\\a");
System.out.println("文件路径是否存在:"+f6.exists());
//判断是否为文件
System.out.println("是否为文件:"+f6.isFile());
//判断是否为文件夹
System.out.println("是否为文件夹:"+f6.isDirectory());
//获取文件名称
File f7 = new File("day08-Stream-Exception-File\\file/a/b/c/tem");
System.out.println("文件名字:"+f7.getName());
//文件大小
System.out.println("文件的大小:"+f7.length());
System.out.println("最后修改时间:"+f7.lastModified());
System.out.println("创建文件对象的路径:"+f7.getParent());
3.4 常用方法3:遍历文件夹
File类提供两种遍历文件夹的方法
public String[] list() ---> 获取当前目录下所有的"一级文件名称"到一个字符串数组中去返回。
public File[] listFile() --->获取当前目录下所有的"一级文件对象"到一个文件对象数组中去返回(重点)
Demo