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);
相关推荐
Piper蛋窝2 小时前
深入 Go 语言垃圾回收:从原理到内建类型 Slice、Map 的陷阱以及为何需要 strings.Builder
后端·go
六毛的毛5 小时前
Springboot开发常见注解一览
java·spring boot·后端
AntBlack5 小时前
拖了五个月 ,不当韭菜体验版算是正式发布了
前端·后端·python
31535669135 小时前
一个简单的脚本,让pdf开启夜间模式
前端·后端
uzong5 小时前
curl案例讲解
后端
一只叫煤球的猫6 小时前
真实事故复盘:Redis分布式锁居然失效了?公司十年老程序员踩的坑
java·redis·后端
大鸡腿同学7 小时前
身弱武修法:玄之又玄,奇妙之门
后端
轻语呢喃9 小时前
JavaScript :字符串模板——优雅编程的基石
前端·javascript·后端
MikeWe9 小时前
Paddle张量操作全解析:从基础创建到高级应用
后端
岫珩9 小时前
Ubuntu系统关闭防火墙的正确方式
后端