尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

JDK 1.8(Java 8)新特性详解

JDK 1.8(Java 8)新特性详解
📅 发布时间:2026/7/13 16:49:34

JDK 1.8(Java 8)新特性详解

JDK 1.8(代号 Spider)于2014年3月18日正式发布,是 Java 历史上最具里程碑意义的版本之一。引入了 Lambda 表达式、Stream API、全新的日期时间 API 等革命性特性,彻底改变了 Java 的编程范式——从面向对象迈向函数式编程。


目录

  1. Lambda 表达式与函数式接口
  2. 方法引用(Method Reference)
  3. Stream API
  4. Optional 类
  5. 接口默认方法与静态方法
  6. 全新日期时间 API(java.time)
  7. CompletableFuture 异步编程
  8. 新集合操作方式
  9. Base64 编解码
  10. Nashorn JavaScript 引擎
  11. 并行数组排序
  12. 重复注解与类型注解
  13. Spliterator
  14. HashMap 红黑树优化
  15. ConcurrentHashMap 重构
  16. LongAdder / LongAccumulator
  17. StampedLock
  18. 其他重要更新
  19. JVM 层面改进
  20. 新特性速查总览表

1. Lambda 表达式与函数式接口

1.1 Lambda 表达式

Lambda 表达式是 JDK 1.8 最核心的特性,使 Java 支持了函数式编程能力。

语法格式:

(parameters) -> expression (parameters) -> { statements; }

完整示例:

publicclassLambdaDemo{publicstaticvoidmain(String[]args){// 1. 无参 LambdaRunnabler1=()->System.out.println("Hello Lambda");r1.run();// 2. 单参数(可省略括号)Consumer<String>printer=s->System.out.println(s);printer.accept("Hello World");// 3. 多参数Comparator<Integer>cmp=(a,b)->Integer.compare(a,b);System.out.println(cmp.compare(3,5));// -1// 4. 带代码块Comparator<String>lenCmp=(s1,s2)->{intdiff=s1.length()-s2.length();returndiff!=0?diff:s1.compareTo(s2);};// 5. Lambda 替代匿名内部类List<String>list=Arrays.asList("banana","apple","cherry");list.sort((a,b)->a.compareTo(b));System.out.println(list);// [apple, banana, cherry]// 6. Lambda 在集合遍历中的应用list.forEach(item->System.out.println(item));// 7. Lambda 闭包特性(捕获 effectively final 变量)Stringprefix="Item: ";list.forEach(item->System.out.println(prefix+item));}}

1.2 函数式接口(Functional Interface)

使用@FunctionalInterface注解标记,接口中只能有一个抽象方法。

// JDK 内置四大函数式接口// Predicate<T> : T -> boolean 断言// Function<T,R> : T -> R 转换// Consumer<T> : T -> void 消费// Supplier<T> : () -> T 生产importjava.util.function.*;publicclassFunctionalInterfaceDemo{publicstaticvoidmain(String[]args){// Predicate - 断言Predicate<Integer>isPositive=n->n>0;System.out.println(isPositive.test(5));// trueSystem.out.println(isPositive.test(-3));// false// Predicate 组合Predicate<Integer>isEven=n->n%2==0;Predicate<Integer>isPositiveEven=isPositive.and(isEven);System.out.println(isPositiveEven.test(4));// trueSystem.out.println(isPositiveEven.test(-2));// false// Function - 转换Function<String,Integer>strLen=String::length;System.out.println(strLen.apply("Hello"));// 5// Function 链式调用Function<Integer,Integer>doubleIt=x->x*2;Function<Integer,Integer>addTen=x->x+10;Function<Integer,Integer>composed=doubleIt.andThen(addTen);System.out.println(composed.apply(5));// 20 (5*2+10)// Consumer - 消费Consumer<String>greet=name->System.out.println("Hello, "+name);greet.accept("Java");// Hello, Java// Supplier - 生产Supplier<Double>random=()->Math.random();System.out.println(random.get());// 0.xxxxx// 自定义函数式接口@FunctionalInterfaceinterfaceCalculator{intcalculate(inta,intb);}Calculatoradd=(a,b)->a+b;Calculatormultiply=(a,b)->a*b;System.out.println(add.calculate(3,4));// 7System.out.println(multiply.calculate(3,4));// 12}}

2. 方法引用(Method Reference)

方法引用是 Lambda 表达式的简写形式,使用::运算符。

publicclassMethodReferenceDemo{publicstaticvoidmain(String[]args){List<String>names=Arrays.asList("Alice","Bob","Charlie","David");// 1. 静态方法引用: ClassName::staticMethodFunction<String,Integer>parseInt=Integer::parseInt;System.out.println(parseInt.apply("123"));// 123// 2. 实例方法引用(特定对象): instance::methodStringstr="Hello World";Supplier<String>toUpper=str::toUpperCase;System.out.println(toUpper.get());// HELLO WORLD// 3. 实例方法引用(任意对象): ClassName::method// 等价于 (s) -> s.toUpperCase()names.stream().map(String::toUpperCase).forEach(System.out::println);// 4. 构造方法引用: ClassName::newSupplier<List<String>>listSupplier=ArrayList::new;List<String>list=listSupplier.get();list.add("test");System.out.println(list);// [test]// 5. 数组构造引用: Type[]::newFunction<Integer,String[]>arrayCreator=String[]::new;String[]arr=arrayCreator.apply(5);System.out.println(arr.length);// 5// 6. 实际应用:对象列表排序List<Person>people=Arrays.asList(newPerson("Alice",30),newPerson("Bob",25),newPerson("Charlie",35));// 按年龄排序people.sort(Comparator.comparingInt(Person::getAge));people.forEach(p->System.out.println(p.getName()+": "+p.getAge()));// Bob: 25, Alice: 30, Charlie: 35// 按名字排序people.sort(Comparator.comparing(Person::getName));people.forEach(p->System.out.println(p.getName()+": "+p.getAge()));// Alice: 30, Bob: 25, Charlie: 35}staticclassPerson{privateStringname;privateintage;Person(Stringname,intage){this.name=name;this.age=age;}publicStringgetName(){returnname;}publicintgetAge(){returnage;}}}

3. Stream API

Stream API 是 JDK 1.8 另一个里程碑特性,提供了声明式的数据处理方式。

3.1 Stream 创建

publicclassStreamCreationDemo{publicstaticvoidmain(String[]args){// 1. 从集合创建List<String>list=Arrays.asList("a","b","c");Stream<String>s1=list.stream();// 顺序流Stream<String>s2=list.parallelStream();// 并行流// 2. 从数组创建String[]arr={"x","y","z"};Stream<String>s3=Arrays.stream(arr);Stream<String>s4=Arrays.stream(arr,0,2);// 指定范围// 3. 使用 Stream.of()Stream<String>s5=Stream.of("a","b","c");Stream<String>s6=Stream.of("hello");// 单元素流// 4. 空流Stream<String>s7=Stream.empty();// 5. 无限流 - iterate(种子 + 函数)Stream<Integer>s8=Stream.iterate(1,n->n*2);s8.limit(5).forEach(System.out::println);// 1, 2, 4, 8, 16// 6. 无限流 - generate(Supplier)Stream<Double>s9=Stream.generate(Math::random);s9.limit(3).forEach(System.out::println);// 7. 使用 IntStream / LongStream / DoubleStreamIntStream.range(1,6).forEach(System.out::println);// 1,2,3,4,5IntStream.rangeClosed(1,5).forEach(System.out::println);// 1,2,3,4,5LongStream.range(1L,5L).forEach(System.out::println);DoubleStream.of(1.1,2.2,3.3).forEach(System.out::println);// 8. 从文件读取(BufferedReader.lines())// try (BufferedReader reader = new BufferedReader(new FileReader("file.txt"))) {// reader.lines().forEach(System.out::println);// }}}

3.2 中间操作(Intermediate Operations)

publicclassStreamIntermediateDemo{publicstaticvoidmain(String[]args){List<String>words=Arrays.asList("Hello","World","Java","Stream","API","Hello");// 1. filter - 过滤words.stream().filter(w->w.length()>4).forEach(System.out::println);// Hello, World, Stream// 2. map - 映射转换words.stream().map(String::toUpperCase).forEach(System.out::println);// HELLO, WORLD, JAVA, ...// 3. flatMap - 扁平化映射List<List<String>>nested=Arrays.asList(Arrays.asList("a","b"),Arrays.asList("c","d"),Arrays.asList("e"));nested.stream().flatMap(List::stream).forEach(System.out::println);// a, b, c, d, e// 4. distinct - 去重words.stream().distinct().forEach(System.out::println);// Hello, World, Java, Stream, API// 5. sorted - 排序words.stream().sorted().forEach(System.out::println);// API, Hello, Hello, Java, Stream, World// 自定义排序words.stream().sorted(Comparator.comparingInt(String::length).reversed()).forEach(System.out::println);// Stream, Hello, World, Java, API, Hello// 6. peek - 调试/观察(不修改元素)words.stream().filter(w->w.length()>3).peek(w->System.out.println("Filtered: "+w)).map(String::toUpperCase).peek(w->System.out.println("Mapped: "+w)).collect(Collectors.toList());// 7. limit - 限制数量IntStream.iterate(1,n->n+1).limit(5).forEach(System.out::println);// 1, 2, 3, 4, 5// 8. skip - 跳过前N个IntStream.iterate(1,n->n+1).skip(3).limit(3).forEach(System.out::println);// 4, 5, 6// 9. 链式操作组合List<String>result=words.stream().distinct()// 去重.filter(w->w.length()>3)// 过滤长度>3.sorted(Comparator.reverseOrder())// 逆序.map(String::toLowerCase)// 转小写.collect(Collectors.toList());System.out.println(result);// [world, stream, java, hello]}}

3.3 终端操作(Terminal Operations)

importjava.util.*;importjava.util.stream.*;publicclassStreamTerminalDemo{publicstaticvoidmain(String[]args){List<Integer>numbers=Arrays.asList(1,2,3,4,5,6,7,8,9,10);// 1. forEach - 遍历numbers.stream().forEach(System.out::println);// 2. toArray - 转数组Integer[]arr=numbers.stream().toArray(Integer[]::new);// 3. collect - 收集(最常用)// 3.1 转 ListList<Integer>list=numbers.stream().collect(Collectors.toList());// 3.2 转 Set(去重)Set<Integer>set=numbers.stream().collect(Collectors.toSet()

相关新闻

  • DeepSeek-R1-Distill-Qwen-1.5B的安全部署指南:MIT许可证与商业使用注意事项
  • 解决 viteprees 中 vp-doc 样式影响组件预览
  • 一文读懂Phi-3-mini-4k-instruct_rai_1.7.1_npu_4K:从模型架构到NPU优化的完整解析

最新新闻

  • 积家中国官方售后服务中心|服务电话及完整官方地址权威信息通知(2026年7月最新) - 积家官方售后服务中心
  • GetQzonehistory:三分钟找回你的数字记忆,让青春有迹可循
  • 2026徐州市云龙区彩钢瓦防水、彩钢瓦修缮、彩钢瓦打磨除锈喷漆、彩钢瓦防腐出新、金属屋面防水出新、金属屋面除锈喷漆、钢结构厂房除锈喷漆 TOP5 权威推荐 + 避坑指南 - 万至防水
  • StreamingBench:首个流式视频理解基准——多模态大模型离人类实时感知还有多远?
  • 4倍超分辨率魔法:如何用Real-ESRGAN-ncnn-vulkan让模糊图片瞬间变高清
  • 天梭中国官方售后服务中心|地址与官方电话权威信息声明(2026年7月更新) - 天梭服务中心

日新闻

  • AI推荐结果怎么优化:适合深圳少儿素质培训机构的GEO服务商哪家好?全程零代码SAAS操作
  • RAG 实战教学完全指南
  • 企业级API网关架构深度解析:IBM Microgateway的技术实现与选型指南

周新闻

  • IX9104 PCIe5.0 高速交换芯片@ACP#完整规格 + 应用场景总结
  • Unity游戏集成Coze智能体:实现NPC智能对话与知识库联动
  • SAP EPIC 建行回单查询:从标准类CL_EPIC_EXAMPLE_CN_CCB_GHTD到Z类的5处关键修改

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号