今日内容
- Lambda表达式
- Stream流
- File类
-
1.Lambda表达式
lambda表达式可以理解为对匿名内部类的一种简化,但是本质是由区别的
- 面向对象思想:
- 强调的是用对象取完成某些功能
函数式编程思想:
只有一个抽象方法需要重写的接口,函数式接口。函数式接口是允许由其他的非抽象方法的存在例如静态方法,默认方法,私有方法
- 为了标识接口是一个函数式接口,可以在接口之上加上一个注解@FunctionalInterface以示区别
在JDK中java.util.function包中的所有接口都是函数式接口。我们之前学习线程时学习的Runnable也是函数式接口
1.3Lambda表达式的使用
使用前提
- 必须存在一个接口
- 接口中有且只有一个抽象方法
格式:(形式参数)->{代码块}
获取Stream流
- 创建一条流水线,并把数据放到流水线上准备进行操作
- 中间方法
- 流水线上的操作
- 一次操作完毕之后,还可以继续进行其他操作
终结方法
单列集合
- 可以使用Collection接口中的默认方法stream()生成流
- default Stream
stream()
- 双列集合
- 双列集合不能直接获取,需要间接的生成流
- 可以先通过keySet或者entrySet获取一个Set集合,再获取Stream流
数组
Stream
filter (Predicate predicate):用于对流中的数据进行过滤 - Predicate接口中的方法:boolean test(T t):对给定的参数进行判断,返回一个布尔值
- Stream
limit(long maxSize):截取指定参数个数的数据 - Stream
skip(long n):跳过指定参数个数的数据 - static
Stream concat(Stream a,Stream b):合并a和b两个流为一个流 - Stream
distinct():去除流中重复的元素。依赖(hashCode和equals方法) - Stream
sorted():将流中元素按照自然排序 Stream
sorted(Comparator<? suoper T> comparator):将流中元素按照自定义比较器规则排序 2.4第三类:终结方法
void forEach(Consumer action):对此流的每个元素执行操作
- Consumer接口中的方法 void accept(T t):对给定的参数执行此操作
-
2.5Stream流中的收集方法
在Stream流中无法直接修改集合,数组等数据源中的数据
- R collect(Collector collector):此方法值负责收集流中的数据,创建集合添加数据动作需要依赖于参数
工具类Collectors提供了具体的收集方式
java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作
构造方法
File类删除功能:
File类判断和获取功能
File类高级获取功能
- public File[] listFiles():返回此抽象路径名表示的目录中的文件和目录的File对象数组
- listFiles方法注意事项:
- 当调用者不存在时,返回null
- 当调用者是一个文件时,返回null
- 当调用者是一个空文件夹时,返回一个长度为0的数组
- 当调用者是一个有内容的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回
- 当调用者是一个有隐藏文件的文件夹时,将里门所有文件和文件夹的路径放在File数组中返回,包含隐藏内容
- listFiles方法注意事项:
- public File[] listFiles():返回此抽象路径名表示的目录中的文件和目录的File对象数组