今日内容

  • Lambda表达式
  • Stream流
  • File类
  • Optional类

    1.Lambda表达式

  • lambda表达式可以理解为对匿名内部类的一种简化,但是本质是由区别的

  • 面向对象思想:
    • 强调的是用对象取完成某些功能
  • 函数式编程思想:

    • 强调的是结果,而不是怎么去做

      1.2函数式接口

  • 只有一个抽象方法需要重写的接口,函数式接口。函数式接口是允许由其他的非抽象方法的存在例如静态方法,默认方法,私有方法

  • 为了标识接口是一个函数式接口,可以在接口之上加上一个注解@FunctionalInterface以示区别
  • 在JDK中java.util.function包中的所有接口都是函数式接口。我们之前学习线程时学习的Runnable也是函数式接口

    1.3Lambda表达式的使用

  • 使用前提

    • 必须存在一个接口
    • 接口中有且只有一个抽象方法
  • 格式:(形式参数)->{代码块}

    • 形式参数:如果由多个参数,参数之间用逗号隔开;如果没有参数,留空即可
    • ->由英文中画线和大于符号组成,固定写好,代表指向动作
    • 代码块:是我们具体要做的事情,也就是以前我们写的方法体内容

      2.Stream流

      2.1Stream流的三类方法

  • 获取Stream流

    • 创建一条流水线,并把数据放到流水线上准备进行操作
  • 中间方法
    • 流水线上的操作
    • 一次操作完毕之后,还可以继续进行其他操作
  • 终结方法

    • 一个Stream流只能有一个终结方法
    • 是流水线上的最后一个操作

      2.2第一类:获取方法

  • 单列集合

    • 可以使用Collection接口中的默认方法stream()生成流
    • default Stream stream()
  • 双列集合
    • 双列集合不能直接获取,需要间接的生成流
    • 可以先通过keySet或者entrySet获取一个Set集合,再获取Stream流
  • 数组

    • Arrays中的静态方法stream生成流

      2.3第二类:中间方法

  • 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):对给定的参数执行此操作
  • long count():返回此流中的元素数

    2.5Stream流中的收集方法

  • 在Stream流中无法直接修改集合,数组等数据源中的数据

  • R collect(Collector collector):此方法值负责收集流中的数据,创建集合添加数据动作需要依赖于参数
  • 工具类Collectors提供了具体的收集方式

    • public static Collector toList():把元素手机到List集合中
    • public static Collector toSet():把元素收集到Set集合中
    • public static Collector toMap(Function keyMapper, Function valueMapper):把元素收集到Map集合中

      3.File类

      3.1File类的介绍

  • java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作

  • 构造方法

    • File(String pathname):通过将给定的路径名字符串转换为抽象路径名来创建新的File实例
    • File(String parent , String child ):从父路径名字符串和子路径名字符串创建新的File实例
    • File(File parent , String child ):从父抽象路径名和子路径名字符串创建新的File实例

      3.2File类的删除功能

  • File类删除功能:

    • public boolean delete() 删除由此抽象路径名表示的文件或目录
    • 注意:
      • delete 方法直接删除不走回收站
      • 如果删除的是一个文件,直接删除
      • 如果删除的是一个文件夹,需要先删除文件夹中的内容,最后才能删除文件夹

        3.3File类的判断和获取功能

  • File类判断和获取功能

    • public boolean isDirectory():测试此抽象路径名表示的File是否为目录
    • public boolean isFile():测试此抽象路径名表示的File是否为文件
    • public boolean exists():测试此抽象路径名表示的File是否存在
    • public String getAbsolutePath():返回抽象路径名的绝对路径名字符串
    • public String getPath():将此抽象路径名转换为路径名字符串
    • public String getName():返回由此抽象路径名表示的文件或目录的名称

      3.4File类高级获取功能

  • File类高级获取功能

    • public File[] listFiles():返回此抽象路径名表示的目录中的文件和目录的File对象数组
      • listFiles方法注意事项:
        • 当调用者不存在时,返回null
        • 当调用者是一个文件时,返回null
        • 当调用者是一个空文件夹时,返回一个长度为0的数组
        • 当调用者是一个有内容的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回
        • 当调用者是一个有隐藏文件的文件夹时,将里门所有文件和文件夹的路径放在File数组中返回,包含隐藏内容