JavaSe基础2023年2月03日学习内容

文章介绍了Java8中的Lambda表达式的使用,包括其简化代码结构的作用,以及适用的接口条件。接着讲解了Stream流如何处理集合,提供了一种声明式处理方式,并举例展示了filter、map、sorted等操作。最后讨论了File类在文件和目录操作中的方法,如判断、获取信息和重命名等。
摘要由CSDN通过智能技术生成

JavaSe-2023-2-03 Lambda表达式、Stream流的使用、File类操作文件夹的使用

每日一句: 很多时候,努力并不是为了得到奖赏,而是为了被认同

学习内容:lambda表达式简单的使用、集合流式Stream的操作、File类操作文件

  • Lambda表达式

    • Lambda表达式是JDK1.8的新特性,可以取代大部分的匿名内部类,写出更加优雅的Java代码尤其是集合的遍历和其他集合操作中,可以极大的优化代码结构!

    • JDK也提供了大量的内置函数接口供我们使用,使用Lambda表达式运用更加方便、高效

    • 对接口的要求

      • 虽然使用Lambda表达式可以对某些接口进行简单的实现,但并不是所有的接口可以使用Lambda表达式来实现,Lambda表达式规定接口中只能有一个需要被实现的方法,不是规定接口中只能有一个方法

      •  public static void main(String[] args) {
                Test t= new Test() {
                    @Override
                    public int test() {
                        return 2;
                    }
                };
                t.test();
                //使用新特性
                Test t1 = () -> 2;
                System.out.println(t1.test());
                Test1 t2 = (x) -> x*2;
                System.out.println(t2.test(5));
                /*定义一个接口 返回两个参数和*/
                Test3 t3=  (x, y) -> x + y;
                System.out.println(t3.test(2,3));
        }
        interface Test{
            int test();
        }
        interface Test1{
            int test(int x);
        }
        //    Lambda 规定接口中只能有一个需要被实现的方法,不是规定接口中只能有一个方法
        interface  Test3{
            int test(int x,int y);
        //    我们还可以定义默认方法
            default int sum(){
                return 0;
            }
        }
        
    • @Functionallnterface

      • 修饰函数式接口的,要求接口中的抽象方法只能有一个,这个注解往往和Lambda表达式一起出现.
    • Lambda基本语法

      • public class TestLambda02 {
            public static void main(String[] args) {
                //无参数无返回值
                A1 a1 = ()->{
                    System.out.println("Lamdba无参数无返回值");
                };
                //有参数无返回值
                A2 a2 = name -> {
                    System.out.println(name+"你好");
                };
                a2.a("李四");
                //无参数有返回值
                A3 a3 = ()->{
                    return true;
                };
                System.out.println(a3.a());
                //有参数有返回值
                A4 a4 = name->{
                    return 0;
                };
                System.out.println(a4.a("张三"));
            }
        }
        //该注解会检查接口是否满足函数式接口
        @FunctionalInterface
        interface A1{
            void a();
            default int t(){
                return 0;
            }
        }
        @FunctionalInterface
        interface A2{
            void a(String name);
        }
        @FunctionalInterface
        interface A3{
            boolean a();
        }
        @FunctionalInterface
        interface A4{
            int a(String name);
        }
        
    • Lambda语法简化

      • public class TestLambda03 {
            public static void main(String[] args) {
        //        参数类型如果可以推断,可以省略,多个参数应该一起被省略
                B1 b = x->{
                    System.out.println("省略了参数类型");
                };
                B2 b2 = x ->{
                    System.out.println("如果只有一个参数,则小括号可以省略");
                };
                B3 b3 = () -> System.out.println("如果方法体中只有一行代码,则大括号可以省略");
                B4 b4 = x -> x*2; //方法体只有一行代码,如果有return,则大括号可以省略
            }
        }
        interface B1{
            void b(int x);
        }
        interface B2{
            void b(int a);
        }
        interface B3{
            void b();
        }
        interface B4{
            int b(int x);
        }
        
  • Stream流的使用

    • Stream流操作是Java8提供一个重要新特性,它允许开发人员以声明性方式处理集合,其核心类库主要是改进了对集合类的API和新增Stream操作。能够使代码更加的简洁,极大地简化了集合的处理操作,提高了开发的效率和生产力。

    • public static void main(String[] args) {
              List<String> list = new ArrayList<>();
              Collections.addAll(list,"张无忌","张三丰","金毛狮王","张译");
      //        找出所有姓张的长度为3的名字
              for (String lists:list) {
                  if(lists.length() == 3 && 		                 lists.substring(0,1).equals("张")){
                      System.out.println(lists);
                  }
              }
      
      //        使用stream流式
              //获取流
              //1 forEach()遍历
              // ::方法的引用
              list.stream().forEach(System.out::println);
              //第二种方式
              list.stream().forEach(s -> System.out.println(s));
      
              //2 long count(); 统计
              long count = list.stream().count();
              System.out.println(count);
      
              //3 filter() 用于过滤数据
              list.stream()
                      .filter(str->str.startsWith("张"))
                      .filter(str->str.length() == 3)
                      .forEach(System.out::println);
              //4 map() 将流中的元素映射到另外一个流中
              List<String> list2 = new ArrayList<>();
              Collections.addAll(list2,"1","12","12","123");
      
      //list2.stream().map(str>Integer.parseInt(str))
      //    .forEach(System.out::println);
              list2.stream().map(Integer::parseInt).forEach(System.out::println);
      
              //5 sorted(); 对流中数据进行排序
              list2.stream().sorted().forEach(System.out::println);
      
              //自定义排序
              list2.stream().map(Integer::parseInt).sorted((a,b)->a-b).forEach(System.out::println);
      
              //去重 distinct()
              list2.stream().distinct().forEach(System.out::println);
      
    • Steam的方法使用在这里插入图片描述

  • File类

    • Java.io.File类:文件和文件目录路径的抽象表示形式

      • File类中涉及到了关于文件或者文件目录的创建、删除、重命名、修改时间、文件大小等方法,并未涉及到写入或者读取文件内容的操作,如果需要读取或者写入文件内容,必须使用IO流
    • File的使用

      • 绝对路径(是一个固定的路径,从盘符开始) 和 相对路径(是相对于某个位置开始)

      • 路径分隔符

        • 路径中每一级之间用一个路径分隔符分开
        • 路径分隔符和系统有关: win和dos系统默认"" URL使用"/"来表示
      • 常用构造器

      • 构造器描述
        public File(String pathname)pathname为路径创建File对象,可以是绝对路径或者相对路径,如果pathname是相对路径,则默认的当前路径在系统属性user.dir中存储。
        public File(String parent,String child)parent为父路径,child为子路径创建File对象。
        public File(File parent,String child)根据一个父File对象和子文件路径创建File对象
      • 常用方法

        • 判断功能

          • 方法描述
            public boolean isDirectory()判断是否是文件目录
            public boolean isFile()判断是否是文件
            public boolean exists()判断是否存在
            public boolean canRead()判断是否可读
            public boolean canWrite()判断是否可写
            public boolean isHidden()判断是否隐藏
        • 获取功能

          • 方法描述
            public String getAbsolutePath()获取绝对路径
            public String getPath()获取路径
            public String getName()获取名称
            public String getParent()获取上层文件目录路径。若无,返回null
            public long length()获取文件长度(即:字节数)。不能获取目录的长度。
            public long lastModified()获取最后一次的修改时间,毫秒值
            public String[] list()获取指定目录下的所有文件或者文件目录的字符串数组
            public File[] listFiles()获取指定目录下的所有文件或者文件目录的File对象数组
            public boolean renameTo(File dest)把文件重命名为指定的文件路径
        • 代码实现

          public static void main(String[] args) {
                  File file = new File("src/com/shoot/po");
                  if(file.isDirectory()){
          //            listFiles(); 将当前目录下的文件或者文件夹以数组的形式返回
                      File[] files = file.listFiles();
                      //返回java文件
                      for (File f:files) {
                          if(f.isFile() && f.getName().endsWith("java")){
                              System.out.println(f.getName());
                          }
                      }
                      //FileFilter:文件过滤器 满足accept方法才能够进入到数组当中
                      File[] files1 = file.listFiles(new FileFilter() {
                          @Override
                          public boolean accept(File f) {
                              return f.isFile() && f.getName().endsWith("java");
                          }
                      });
                      for (File f:files1) {
                          System.out.println(f.getName());
                      }
          

        }

        
        
      • 文件夹删除 代码实现

        •  public static void main(String[] args) {
                File file = new File("E:\\abc");
                if (file.isDirectory()){
                    deleteFile(file);
                    System.out.println("删除成功");
                }
              }
            
              private static void deleteFile(File file) {
                  //获取当前目录下的所有文件和文件夹
                  File[] files = file.listFiles();
                  //是文件直接删除
                  for (File f:files) {
                      if(f.isFile()){
                          //是文件夹的话直接调用方法删除
                          f.delete();
                      }else{
                          deleteFile(f);
                      }
                  }
                  //删除当前目录
                  file.delete();
              }
          
  • 新手上路,以上内容仅供参考,如有不对的地方,望指出!

  • gitee代码仓库地址:https://gitee.com/Zhengsenbing/java-se-basic

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值