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);
相关推荐
野犬寒鸦15 小时前
从零起步学习并发编程 || 第一章:初步认识进程与线程
java·服务器·后端·学习
我爱娃哈哈15 小时前
SpringBoot + Flowable + 自定义节点:可视化工作流引擎,支持请假、报销、审批全场景
java·spring boot·后端
李梨同学丶17 小时前
0201好虫子周刊
后端
思想在飞肢体在追17 小时前
Springboot项目配置Nacos
java·spring boot·后端·nacos
Loo国昌20 小时前
【垂类模型数据工程】第四阶段:高性能 Embedding 实战:从双编码器架构到 InfoNCE 损失函数详解
人工智能·后端·深度学习·自然语言处理·架构·transformer·embedding
ONE_PUNCH_Ge20 小时前
Go 语言泛型
开发语言·后端·golang
良许Linux21 小时前
DSP的选型和应用
后端·stm32·单片机·程序员·嵌入式
不光头强21 小时前
spring boot项目欢迎页设置方式
java·spring boot·后端
怪兽毕设21 小时前
基于SpringBoot的选课调查系统
java·vue.js·spring boot·后端·node.js·选课调查系统
学IT的周星星21 小时前
Spring Boot Web 开发实战:第二天,从零搭个“会卖萌”的小项目
spring boot·后端·tomcat