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);
相关推荐
SomeB1oody1 小时前
【RustyML入门】6.0. 数学工具
开发语言·后端·机器学习·rust·教程
IT_陈寒1 小时前
为什么我的JavaScript闭包总是漏掉那个变量?
前端·人工智能·后端
用户8356290780512 小时前
如何使用 Python 将 PowerPoint 转换为 PDF 文档
后端·python
倔强的石头_2 小时前
从 8 行报错到一条故障链:我用蓝耘 MaaS 做了一个 AI 日志分析助手
后端
敲个大西瓜2 小时前
Spring Could Alibaba 核心面试题
java·后端·spring
用户8356290780512 小时前
如何使用 Python 为 PowerPoint 幻灯片添加切换效果
后端·python
四千岁3 小时前
RAG系统中的分块
前端·javascript·后端
Young_Gnay3 小时前
.NET 之 WebApi学习笔记 (持续更新)
后端·c#
程序员cxuan3 小时前
Claude Code :如何最大化你的 Session 价值
人工智能·后端·程序员