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);
相关推荐
恸流失6 小时前
DJango项目
后端·python·django
Mr Aokey9 小时前
Spring MVC参数绑定终极手册:单&多参/对象/集合/JSON/文件上传精讲
java·后端·spring
地藏Kelvin9 小时前
Spring Ai 从Demo到搭建套壳项目(二)实现deepseek+MCP client让高德生成昆明游玩4天攻略
人工智能·spring boot·后端
菠萝0110 小时前
共识算法Raft系列(1)——什么是Raft?
c++·后端·算法·区块链·共识算法
长勺10 小时前
Spring中@Primary注解的作用与使用
java·后端·spring
小奏技术11 小时前
基于 Spring AI 和 MCP:用自然语言查询 RocketMQ 消息
后端·aigc·mcp
编程轨迹11 小时前
面试官:如何在 Java 中读取和解析 JSON 文件
后端
lanfufu11 小时前
记一次诡异的线上异常赋值排查:代码没错,结果不对
java·jvm·后端
编程轨迹11 小时前
如何在 Java 中实现 PDF 与 TIFF 格式互转
后端
编程轨迹11 小时前
面试官:你知道如何在 Java 中创建对话框吗
后端