Java 11对集合类做了哪些增强?

文章目录

      • [1. `Collection` 接口新增 `toArray(IntFunction)` 方法](#1. Collection 接口新增 toArray(IntFunction) 方法)
      • [2. `Stream` 流新增 `toList()` 方法](#2. Stream 流新增 toList() 方法)
      • [3. `Optional` 类新增 `isEmpty()` 方法](#3. Optional 类新增 isEmpty() 方法)
      • [4. 其他集合相关的间接增强](#4. 其他集合相关的间接增强)
      • 总结

Java 11 对集合类(Collection Framework)的增强主要集中在简化代码、提升易用性方面,虽然没有引入全新的数据结构,但对现有集合接口和工具类增加了实用方法,让集合操作更加简洁。以下是具体增强点:

1. Collection 接口新增 toArray(IntFunction) 方法

Java 11 为 Collection 接口添加了一个默认方法,用于更灵活地将集合转换为数组:

java 复制代码
// Java 8 及之前的写法
List<String> list = Arrays.asList("a", "b", "c");
String[] array = list.toArray(new String[0]); // 需要手动创建数组实例

// Java 11 新增写法(更简洁)
String[] array = list.toArray(String[]::new); // 直接传递数组构造器,无需指定长度

该方法通过 IntFunction 接口接收数组构造器(如 String[]::new),内部会根据集合大小自动创建合适长度的数组,避免了手动指定初始长度的麻烦。

2. Stream 流新增 toList() 方法

Java 11 为 Stream 接口添加了 toList() 方法,用于快速将流结果收集为不可变列表(List):

java 复制代码
// Java 8 写法(需依赖 Collectors)
List<String> result = list.stream()
    .filter(s -> s.length() > 2)
    .collect(Collectors.toList()); // 可能返回 mutable 或 immutable 列表(取决于实现)

// Java 11 新增写法(更简洁,且返回不可变列表)
List<String> result = list.stream()
    .filter(s -> s.length() > 2)
    .toList(); // 直接返回不可变 List,不支持 add/remove 操作

注意:toList() 返回的是不可变列表 (类似 List.of() 创建的列表),如果尝试修改会抛出 UnsupportedOperationException;而 Collectors.toList() 返回的列表是否可变则取决于具体实现(如 Java 8 中 ArrayList 是可变的)。

3. Optional 类新增 isEmpty() 方法

虽然 Optional 不属于集合类,但常与集合操作配合使用。Java 11 为 Optional 新增了 isEmpty() 方法,用于判断是否为空,替代了之前的 !isPresent() 写法,更直观:

java 复制代码
Optional<String> opt = Optional.empty();

// Java 8 写法
if (!opt.isPresent()) {
    System.out.println("为空");
}

// Java 11 写法
if (opt.isEmpty()) { // 更简洁,语义更明确
    System.out.println("为空");
}

4. 其他集合相关的间接增强

  • String 类新增方法对集合的支持 :Java 11 为 String 新增的 lines() 方法返回 Stream<String>,可直接与流操作结合处理多行文本:

    java 复制代码
    String text = "a\nb\nc";
    List<String> lines = text.lines().toList(); // 直接转换为列表 ["a", "b", "c"]
  • 集合与模块化的兼容性优化 :Java 11 进一步完善了模块化系统对集合类的支持,确保 java.util 包下的集合类在模块化项目中可正常访问,减少了类路径冲突问题。

总结

Java 11 对集合类的增强以简化代码提升可读性 为核心,没有引入颠覆性的新特性,但 toArray(IntFunction)Stream.toList() 等方法显著减少了集合操作的模板代码,让开发者能更专注于业务逻辑。这些增强保持了对 Java 8 的兼容性,同时为后续集合框架的演进奠定了基础。

相关推荐
Wang's Blog6 小时前
Java框架快速入门:Spring Security+OAuth2之用户注册与唯一性校验实现
java·数据库·spring
Wang's Blog6 小时前
Java框架快速入门: Spring Security+OAuth2之多因子认证与TOTP实战
java·spring·ui
滕州市燕猫虎计算机科技工作室个体工商户7 小时前
Java面试题汇总
java·开发语言
2301_32241428048 小时前
活力孕康复APP 47737- 原创(免费领源码+部署教程+开发环境)
java·vue.js·spring boot·mysql·微信小程序·idea·微信开发者工具
君顾18 小时前
外卖CPS软件开发实战:从系统架构到部署全流程指南
java·开发语言·外卖
vx_Biye_Design9 小时前
springboot游泳馆系统93765-计算机课程设计、毕业设计
java·javascript·spring boot·后端·python·spring·课程设计
名字还没想好☜9 小时前
Java NIO ByteBuffer 实战:flip/clear/compact 三个绕晕人的方法与 position/limit 心智模型
java·开发语言·后端·spring·nio
Wang's Blog9 小时前
Java框架快速入门: Spring Security+OAuth2之短信服务多供应商动态切换(阿里云与LeanCloud)
java·spring·阿里云
Doubbbbbbble云9 小时前
区间合并问题的常见算法模式与优化思路4
java·数据结构·算法
小溪学编程9 小时前
AQS 原理详解:从 CLH 队列到 ReentrantLock 的实现
java·开发语言