JavaSE进阶-Stream&File

   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<E> stream()

                    // List集合转Stream流对象
                    Stream<String> stream = list.stream();
                    // Set集合转Stream流对象
                    Stream<Integer> stream2 = hs.stream();

            双列集合
                无法直接转换为Stream流对象的
                可以间接转换,即先转换为单列集合,然后转换为Stream流对象

                // 获取所有的键转为Set集合
                Set<String> keys = hm.keySet();
                Stream<String> stream1 = keys.stream();
                // 获取所有的键值对对象转为Set集合
                Set<Map.Entry<String, Integer>> entries = hm.entrySet();
                Stream<Map.Entry<String, Integer>> stream2 = entries.stream();
                // 获取所有的值转为Set集合
                Collection<Integer> values = hm.values();
                Stream<Integer> stream3 = values.stream();

        数组 ->Stream流对象
            Arrays类中的(第一种方式)
                static <T> Stream<T> stream(T[] array)
            Stream接口中的(第二种方式)
                static <T> Stream<T> of(T... values)

            大部分情况下,这两种方式都可以,随便选择一种,但是对于基本类型的数组(比如:int[]等)
            转为Stream流的时候,选择第一种方式
    流操作的方法
        中间方法:方法返回值还是Stream类型
                Stream<T> filter(Predicate predicate):过滤,满足条件的留下,不满足的过滤。
                Stream<T> distinct():去重,流中有重复数据会只留下一个
                Stream<T> limit(long maxSize):截取前几个
                Stream<T> skip(long n):跳过前几个
                static <T> Stream<T> concat(Stream a, Stream b):拼接(合并),将两个流中的数据合并在一起
                <R> Stream<R> map(Function mapper):转换,将流中的数据转换之后重新放到另一个流

        终结方法:方法返回值不是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

             是否所有的路径都可以写成相对路径?
                不是的,只有项目下的文件或者文件夹的路径才可以写出相对路径

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值