1.8更新后的接口中default默认、static静态方法,以及一些stream流常用api以及对应用法

在接口中新增default默认方法

  • 向现有接口添加功能而不破坏向后兼容性

在JDK 1.8之前,接口只能定义抽象方法和常量,无法提供方法的具体实现。因此,当需要为接口添加新方法时,所有实现该接口的类都需要重新实现这些方法,这可能导致大量代码修改并破坏向后兼容性。

通过引入default关键字,开发者可以在接口中直接提供方法的默认实现,这样现有的实现类无需修改即可使用这些新方法。例如,在Collection接口中添加stream()方法后,所有实现Collection接口的类都可以直接调用该方法,而无需重新实现

  • 与静态方法的区别

默认方法与静态方法的主要区别在于调用方式和作用范围。默认方法需要通过实例对象调用,而静态方法可以直接通过接口名调用。

  • 避免破坏现有实现

默认方法的引入不会改变接口的抽象特性,即接口仍然保持其不可实例化的特点。同时,由于默认方法提供了实现,因此不会影响到那些未覆盖该方法的实现类

Stream流

创建流

  • 通过集合创建流:List<String> list = Arrays.asList("a", "b", "c"); Stream<String> stream = list.stream();直接通过集合创建流

  • 通过数组创建流:String[] array = new String[]{"a", "b", "c"}; Stream<String> stream = Arrays.stream(array); 通过Arrays工具包中的重载stream方法实现数组创建流

  • 使用 Stream.generate() 创建无限流:Stream<Integer> stream = Stream.generate(() -> new Random().nextInt()).limit(size); 通过Stream中的静态方法generate Stream流API的使用

scss 复制代码
    //使用generate 创建流
      Stream<Integer> streamInteger = Stream.generate(() -> new Random().nextInt()).limit(100);
      Stream<String> streamString = Stream.generate(() -> "hello" + new Random().nextInt()).limit(100);
kotlin 复制代码
        //过滤 filter(s->{
            return  s>= 0  ;//过滤条件,为true则元素留下,为false则过滤
        })
        // lambda表达式简化后
        List<Integer> filteredList = streamInteger.filter(s ->  s >= 0).toList();
ini 复制代码
       //排序sorted :默认升序 => 默认为:sorted((o1,o2) -> {return o1 - o2 ;})
       List<Integer> ascList = filteredList.stream().sorted().toList();
      
       //降序排列
       List<Integer> descList1 = filteredList.stream().sorted((o1, o2) -> o2 - o1).toList();
      

       List<String> collect = streamString.filter(s -> s.endsWith("0")).toList();
scss 复制代码
        //构建流
        Stream<String> distinctPastList = Stream.generate(() -> "hello" + new Random().nextInt(10)).limit(100);
        //去重
        List<String> uniqueList = distinctPastList.distinct().toList();
        System.out.println(uniqueList);

        //构建流
        List<Integer> numbers = Stream.generate(() -> new Random().nextInt(100)).limit(100).toList();
        
        
        //求和
        int sum = numbers.stream().mapToInt(Integer::intValue).sum();
        System.out.println(sum);


        //最大值
        Optional<Integer> max = numbers.stream().max(Integer::compare);
        //先判断max是否为空,再打印 原式为:max.ifPresent(s -> System.out.println(s))
        max.ifPresent(System.out::println);


        String concatenated = String.join("", collect);
相关推荐
Chandler2412 分钟前
Go:反射
开发语言·后端·golang
pwzs19 分钟前
深入浅出 MVCC:MySQL 并发背后的多版本世界
数据库·后端·mysql
盒子691019 分钟前
go for 闭环问题【踩坑记录】
开发语言·后端·golang
刘大猫261 小时前
Arthas monitor(方法执行监控)
人工智能·后端·监控
追逐时光者1 小时前
MongoDB从入门到实战之MongoDB简介
后端·mongodb
Huazie2 小时前
在WSL2 Ubuntu中部署FastDFS服务的完整指南
服务器·后端·ubuntu
行者无疆xcc3 小时前
【Django】设置让局域网内的人访问
后端·python·django
嘵奇3 小时前
基于Spring Boot实现文件秒传的完整方案
java·spring boot·后端
Value_Think_Power3 小时前
azure 一个 pod 内有多个 container ,这些container 可以 共享一块磁盘吗
后端
李菠菜3 小时前
优化Centos关闭SELinux/Swap及资源限制调整
linux·后端·centos