JDK8 开发最常用的新特性
JDK8 是 Java 史上使用率最高、企业开发必备的版本核心新特性完全改变了 Java 的编码风格以下是开发中 100% 会用到的核心特性按使用频率排序一、Lambda 表达式最核心语法(参数) - { 代码体 }无参数、单参数、多行代码都有简化写法。作用简化匿名内部类让代码更简洁是所有新特性的基础。适用场景接口只有一个抽象方法函数式接口如 Runnable、Comparator、集合遍历。// 旧写法匿名内部类 new Thread(new Runnable() { Override public void run() { System.out.println(旧写法); } }).start(); // JDK8 Lambda 写法 new Thread(() - System.out.println(Lambda 简化写法)).start();二、Stream 流集合处理神器作用一行代码完成集合的过滤、排序、分组、求和、去重等操作彻底告别 for 循环。适用场景List/Map/Set 数据处理、报表计算、数据筛选、集合转换。常用操作filter/map/sorted/distinct/limit/count/groupingBy(分组)。ListUser userList new ArrayList(); // 需求筛选年龄18岁的用户按年龄升序提取名字集合 ListString nameList userList.stream() .filter(user - user.getAge() 18) // 过滤 .sorted(Comparator.comparing(User::getAge)) // 排序 .map(User::getName) // 提取字段 .collect(Collectors.toList()); // 转集合三、方法引用Lambda 简化作用进一步简化 Lambda 代码直接引用已有方法。格式类名::方法名或对象::方法名// Lambda 写法 list.forEach(s - System.out.println(s)); // 方法引用简化 list.forEach(System.out::println);四、函数式接口作用专门为 Lambda 设计的接口只有一个抽象方法JDK 内置了大量常用接口。开发常用 4 个核心接口ConsumerT消费型接口有入参无返回值 →forEach用SupplierT供给型接口无入参有返回值FunctionT,R函数型接口有入参有返回值 →map用PredicateT断言型接口有入参返回布尔 →filter用五、Optional 类解决空指针作用优雅处理对象为 null 的情况彻底避免 NullPointerException。适用场景对象判空、获取嵌套属性、默认值赋值。// 旧写法繁琐的判空 if (user ! null user.getAddress() ! null) { String city user.getAddress().getCity(); } // JDK8 Optional 一行搞定 String city Optional.ofNullable(user) .map(User::getAddress) .map(Address::getCity) .orElse(默认城市); // 为空时返回默认值六、日期时间 APIjava.time作用替代笨重的 Date、Calendar线程安全、API 简洁易用。核心类LocalDate(日期)、LocalTime(时间)、LocalDateTime(日期时间)、DateTimeFormatter(格式化)// 获取当前时间 LocalDateTime now LocalDateTime.now(); // 格式化线程安全不用再用 SimpleDateFormat DateTimeFormatter formatter DateTimeFormatter.ofPattern(yyyy-MM-dd HH:mm:ss); String formatTime now.format(formatter); // 日期计算 LocalDate tomorrow LocalDate.now().plusDays(1);七、JDK8 与 JDK7 最核心区别1. 最核心、最本质的区别JDK7面向过程、命令式编程写循环、嵌套判断、代码冗长、空指针多、日期 API 线程不安全。JDK8函数式编程 流式编程简洁、高效、优雅彻底改变 Java 编码风格。2. 关键功能区别1) 语法层面JDK7只能用匿名内部类代码冗长。JDK8Lambda 表达式代码极简。2) 集合处理JDK7必须手写 for 循环、过滤、排序、转换代码量大。JDK8Stream 流一行处理集合过滤 / 排序 / 分组 / 求和。3) 空指针安全JDK7大量if(obj ! null)容易漏写导致 NPE。JDK8Optional优雅处理空值。4) 日期时间 APIJDK7Date、Calendar、SimpleDateFormat线程不安全难用。JDK8全新java.time包LocalDate、LocalDateTime线程安全。5) 接口功能JDK7接口只能有抽象方法实现类必须全部重写。JDK8接口支持default 默认方法、static 静态方法。6) 方法引用JDK7无。JDK8类::方法简化 Lambda。7) 函数式接口JDK7无专门规范。JDK8内置大量函数式接口Predicate、Function、Consumer、Supplier。8) HashMap 底层JDK7数组 链表链表过长性能差。JDK8数组 链表 红黑树查询效率大幅提升。9) 并发与工具类JDK8新增并行流、CompletableFuture、Base64 内置工具。JDK7无这些。