289. Java Stream API - 从字符串的字符创建 Stream

文章目录

  • [289. Java Stream API - 从字符串的字符创建 Stream](#289. Java Stream API - 从字符串的字符创建 Stream)
      • [🎯 核心概念](#🎯 核心概念)
      • [📌 示例 1:`Java 10` 及更早版本](#📌 示例 1:Java 10 及更早版本)
      • [🧠 讲解:](#🧠 讲解:)
      • [📌 示例 2:`Java SE 11` 及以后版本](#📌 示例 2:Java SE 11 及以后版本)
      • [🧠 讲解:](#🧠 讲解:)
      • [📚 小贴士](#📚 小贴士)
      • [🎓 应用场景](#🎓 应用场景)
      • [🎯 小测验(课堂互动)](#🎯 小测验(课堂互动))
      • [📌 总结](#📌 总结)

289. Java Stream API - 从字符串的字符创建 Stream

🎯 核心概念

Java SE 8 中,String 类新增了一个 chars() 方法。这个方法返回一个 IntStream,其中包含了字符串中每个字符的 代码点code point)。这些字符代码点是整数,通常类似于 ASCII 码。

为了将 IntStream 中的代码点转换回字符,通常需要将其转化为字符类型并进行后续操作。


📌 示例 1:Java 10 及更早版本

Java SE 10 及之前版本,你可以使用以下代码:

java 复制代码
String sentence = "Hello Duke";

List<String> letters =
    sentence.chars()  // 获取字符流(以 code point 的形式)
            .mapToObj(codePoint -> (char) codePoint)  // 将 code point 转换为字符
            .map(Object::toString)  // 转换为 String 类型
            .toList();  // 收集为列表

System.out.println("letters = " + letters);

🧾 输出:

java 复制代码
letters = [H, e, l, l, o,  , D, u, k, e]

🧠 讲解:

  1. sentence.chars() :将字符串转换为 IntStream,流中的每个元素是字符串字符的整数代码点。
  2. mapToObj(codePoint -> (char) codePoint) :将每个整数代码点转换为 char 类型的字符。
  3. map(Object::toString):把字符转换成字符串。
  4. toList() :将流收集到 List<String> 中。

这种方式虽然有效,但稍显繁琐。


📌 示例 2:Java SE 11 及以后版本

Java SE 11 中,Character 类新增了一个 toString() 方法,可以让我们直接简化代码:

java 复制代码
String sentence = "Hello Duke";

List<String> letters =
    sentence.chars()  // 获取字符流(以 code point 的形式)
            .mapToObj(Character::toString)  // 使用 Character.toString() 转换为字符串
            .toList();  // 收集为列表

System.out.println("letters = " + letters);

🧾 输出:

java 复制代码
letters = [H, e, l, l, o,  , D, u, k, e]

🧠 讲解:

  1. 现在我们直接使用 Character::toString 来简化字符到字符串的转换。
  2. 其余的部分与前面的例子相同。

这种方式在 Java SE 11 及更高版本中使用起来更加简洁。


📚 小贴士

  • 代码点(code point) :指的是字符在 Unicode 编码中的表示方式。例如,字符 H 的代码点是 72,字符 e 的代码点是 101
  • 在 Java 中,字符16 位的,但代码点 可以是 32 位的,支持更多的字符(包括 Emoji 等)。

🎓 应用场景

  1. 字符串分析:提取每个字符并进行个别处理,例如统计字符频率、查找特定字符等。
  2. 字符替换:将字符流中的每个字符根据某些规则进行替换。
  3. 国际化 :在多语言支持的系统中,处理不同编码的字符时,字符的代码点可以帮助我们处理所有的 Unicode 字符。

🎯 小测验(课堂互动)

问题:sentence.chars() 返回的流中,'H' 的代码点是多少?

✅ A. 72

❌ B. 101

正确答案: A


📌 总结

  • String.chars() 是将字符串转换为字符流的有力工具。
  • Java SE 11 简化了代码,提供了更简洁的字符转字符串的方式。
  • 理解字符的 代码点 是理解字符串流操作的基础。
相关推荐
咖啡八杯4 分钟前
GoF设计模式——解释器模式
java·后端·spring·设计模式
优橙教育16 分钟前
5G网优培训 vs Java开发:转行选哪个?
java·开发语言·5g
腻害兔2 小时前
【若依项目-产品经理视角】RuoYi-Vue-Pro 源码拆解:字典、短信、邮件、通知——后台系统的“基础设施四件套“!
java·前端·vue.js·产品经理·ai编程
SeaTunnel2 小时前
从 Python Script 地狱到标准化数据集成框架
大数据·开发语言·python·程序员·代码·seatunnel
碎光拾影2 小时前
ARM交叉工具链各工具作用及IMX6ULL平台LED+蜂鸣器裸机程序实现
java·开发语言·数据库
Marst Code3 小时前
(python)2026Plotly 库评估:交互式可视化到底值不值得引入?
开发语言·python
Miao121313 小时前
微服务 API 测试实践:海外某民宿平台如何构建模式驱动测试基础设施
java·开发语言
腻害兔3 小时前
【若依项目-产品经理视角】RuoYi-Vue-Pro 源码拆解:支付模块 yudao-module-pay,一个让产品经理都看懂的支付中台设计
java·前端·vue.js·产品经理·ai编程
CRMEB系统商城4 小时前
开源自建还是SaaS订阅?算一笔3年经济账
java·大数据·开发语言·开源
keyipatience6 小时前
线程栈与TLS和线程互斥
java·linux·服务器·开发语言·ubuntu