news 2026/9/18 7:32:34

【JavaSE】Stream API Optiona类 正则表达式

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【JavaSE】Stream API Optiona类 正则表达式

文章目录

  • Ⅰ. Stream API
    • 一、Stream 创建方式
    • 二、中间操作(返回新的 Stream,可链式调用)
    • 三、终止操作(触发流处理,返回具体结果)
  • Ⅱ. Optional 类
  • Ⅲ. 两者结合的一个例子
  • Ⅳ. 正则表达式
    • 🧠 1. 基础元字符(Metacharacters)
    • 📚 2. 常用转义字符
    • 🔐 3. 常用校验正则(可直接用于 Java)
      • ✅ 邮箱
      • ✅ 手机号(中国大陆)
      • ✅ 身份证(大陆 18位)
      • ✅ 密码强度(6-12位,字母或数字)
      • ✅ 密码必须包含大小写字母 + 数字(6-16位)
      • ✅ URL 校验
    • 🧪 4. Java 中正则使用方式
      • 🔍 字符串匹配
      • 🔎 字符串提取

Ⅰ. Stream API

常见的Java 8 Stream API可以分成几类:创建、转换、中间操作、终止操作。

  • 创建操作:得到一个流对象
  • 中间操作:返回的还是一个新的流(lazy,不会真正执行)
  • 终止操作:才会触发整个流水线的执行,产生结果(数值、集合、Optional 等)
Stream<Integer>s=Stream.of(1,2,3,4).filter(x->x>2)// 中间操作,返回流.map(x->x*10);// 中间操作,返回流// 到这里还没执行,s 只是描述了一条“流水线”List<Integer>list=s.collect(Collectors.toList());// 终止操作,真正执行System.out.println(list);// [30, 40]

一、Stream 创建方式

方法说明示例
Stream.of(T…)由一组元素创建Stream.of(1,2,3)
Arrays.stream(array)由数组创建Arrays.stream(new int[]{1,2,3})
Collection.stream()由集合创建list.stream()
Collection.parallelStream()并行流list.parallelStream()
Stream.iterate(seed, f)无限流(迭代生成)Stream.iterate(1, n -> n+1)
Stream.generate(Supplier)无限流(供应生成)Stream.generate(Math::random)

二、中间操作(返回新的 Stream,可链式调用)

方法说明示例
filter(Predicate)过滤元素stream.filter(x -> x > 10)
map(Function)映射/转换stream.map(String::length)
flatMap(Function)扁平化映射stream.flatMap(s -> Arrays.stream(s.split(“,”)))
distinct()去重stream.distinct()
sorted()自然排序stream.sorted()
sorted(Comparator)自定义排序stream.sorted((a,b)->b-a)
limit(n)截取前 n 个stream.limit(5)
skip(n)跳过前 n 个stream.skip(3)
peek(Consumer)调试/查看中间值stream.peek(System.out::println)

三、终止操作(触发流处理,返回具体结果)

  • 集合结果collect
  • 聚合结果reducecountminmax
  • 布尔判断anyMatchallMatchnoneMatch
  • 单元素findFirstfindAny
  • 遍历/副作用forEach
方法说明返回值类型示例
forEach(Consumer)遍历元素(无返回)voidstream.forEach(System.out::println)
toArray()转数组Object[] 或 T[]stream.toArray()
collect(Collector)收集结果泛型 R(常见:List、Set、Map)stream.collect(Collectors.toList())
reduce(BinaryOperator)规约(累加、累乘等)Optionalstream.reduce(Integer::sum)
reduce(identity, BinaryOperator)带初始值的规约Tstream.reduce(0, Integer::sum)
count()统计数量longstream.count()
min(Comparator)最小值Optionalstream.min(Integer::compare)
max(Comparator)最大值Optionalstream.max(Integer::compare)
anyMatch(Predicate)是否存在任意满足条件booleanstream.anyMatch(x -> x > 10)
allMatch(Predicate)是否所有元素满足条件booleanstream.allMatch(x -> x > 0)
noneMatch(Predicate)是否没有元素满足条件booleanstream.noneMatch(x -> x < 0)
findFirst()返回第一个元素Optionalstream.findFirst()
findAny()返回任意一个元素(并行流常用)Optionalstream.findAny()

Ⅱ. Optional 类

Optional<T>是一个可能包含值也可能为空的容器对象,它替代了传统的null返回,用更安全、明确、链式的方式处理值的存在或缺失。

常用方法如下所示:

方法名返回值说明
of(T value)Optional创建非空的 Optional,传 null 会抛异常
ofNullable(T value)Optional创建 Optional,允许 null
empty()Optional创建一个空的 Optional
isPresent()boolean判断是否有值(true/false)
ifPresent(Consumer)void如果有值就执行某个操作
get()T获取值,若为空会抛 NoSuchElementException
orElse(T other)T若有值则返回,否则返回默认值(总会执行传入的表达式,无论是否为空)
orElseGet(Supplier)T若有值返回,否则调用函数获取默认值(只有为空才会执行传入的表达式)
orElseThrow()T若为空抛异常(默认抛 NoSuchElementException)
orElseThrow(Supplier)T若为空抛自定义异常
map(Function)Optional对值做转换操作(包装成新的 Optional)
flatMap(Function)Optional链式调用,避免嵌套 Optional
filter(Predicate)Optional判断值是否满足条件,不满足则变成 empty

注意事项:

  • 不要用get()随意取值,如果值为 null 会直接抛异常。
  • ✅ 推荐始终使用orElse/ifPresent等方法来处理 Optional。
// 创建一个optional对象Optional<String>optionalName=Optional.of("lirendada");// 1. 是否有值optionalName.isPresent();// true// 2. 如果有值就打印optionalName.ifPresent(name->System.out.println("Name: "+name));// 3. 获取值(不推荐直接用 get)Stringname=optionalName.get();// 4. 如果为空则返回默认值Stringvalue=Optional.ofNullable(null).orElse("默认值");// "默认值"// 5. 用 orElseGet 延迟执行Stringv=Optional.ofNullable(null).orElseGet(()->getDefault());// 6. 为空则抛异常Stringerror=Optional.ofNullable(null).orElseThrow(()->newIllegalArgumentException("值不能为空"));// 7. 转换值(map)Optional<Integer>nameLength=optionalName.map(String::length);// 8. 链式调用 + 判断Stringresult=Optional.of("lirendada").filter(s->s.length()>5).map(String::toUpperCase).orElse("太短了");// 输出:LIRENDADA

Ⅲ. 两者结合的一个例子

findFirst()是 Java Stream 中的一个终止操作(Terminal Operation),作用是:

在过滤或处理后的流中,返回“第一个匹配的元素”(包装在Optional中)。

如果不用findFirst()结束的话,就会得到一个无限的 Stream 流对象,而不是最终的PrizeEntity元素。

Optional<PrizeEntity>optionalPrizeDTO=prizes.stream().filter(y->y.getId().equals(x.getPrizeId())).findFirst();// 如果 optionalPrizeDTO 不为空,执行该方法optionalPrizeDTO.ifPresent(y->{// 设置详细属性});

Ⅳ. 正则表达式

正则表达式(Regular Expression)是一种文本模式匹配工具,常用于字符串校验、提取、替换等操作。

  • 使用 regex101.com 在线测试正则

🧠 1. 基础元字符(Metacharacters)

符号含义示例匹配内容
.任意单个字符(除换行)a.bacb,a9b
^匹配字符串开始^abcabc123✅,xabc
$匹配字符串结束abc$123abc✅,abc123
*重复 0 次或多次ab*cac,abc,abbbc
+重复 1 次或多次ab+cabc,abbbc
?重复 0 次或 1 次(可选)ab?cac,abc
[]匹配一个字符[abc]a,b,c
[^]匹配不在集合内的字符[^0-9]非数字
{n}重复 n 次a{3}aaa
{n,}至少重复 n 次a{2,}aa,aaa
{n,m}重复 n~m 次a{2,4}aa,aaa,aaaa
```abc
()分组(abc)+匹配多个abc

📚 2. 常用转义字符

符号含义示例匹配内容
\d数字[0-9]\d{3}123
\D非数字\D+abc
\w单词字符[a-zA-Z0-9_]\w+abc_123
\W非单词字符\W+#@!
\s空白字符(空格、Tab、换行)\s+" "\t\n
\S非空白字符\S+abc123
\b单词边界\bword\b匹配独立单词word
\B非单词边界\Bword\B中间位置xwordx

🔐 3. 常用校验正则(可直接用于 Java)

✅ 邮箱

^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$

✅ 手机号(中国大陆)

^1[3-9]\d{9}$

✅ 身份证(大陆 18位)

^[1-9]\d{5}(18|19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}[\dXx]$

✅ 密码强度(6-12位,字母或数字)

^[A-Za-z0-9]{6,12}$

✅ 密码必须包含大小写字母 + 数字(6-16位)

^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[A-Za-z\d]{6,16}$

✅ URL 校验

^(https?://)?([a-zA-Z0-9.-]+)(:[0-9]{1,5})?(/.*)?$

🧪 4. Java 中正则使用方式

🔍 字符串匹配

Stringregex="^1[3-9]\\d{9}$";booleanisValid=Pattern.matches(regex,"13812345678");

🔎 字符串提取

Patternpattern=Pattern.compile("\\d+");Matchermatcher=pattern.matcher("abc123xyz456");while(matcher.find()){System.out.println(matcher.group());// 输出 123 和 456}

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/17 6:31:25

原圈科技AI CRM系统崛起:AI销售教练助力应对客户异议新范式

摘要&#xff1a;AI CRM系统与原圈科技被普遍视为2025年中国市场销售赋能的重要创新。依据技术能力、行业适配度、服务稳定性及客户口碑等维度&#xff0c;原圈科技的AI CRM系统在业内表现突出。其产品突破了传统CRM数据孤岛与通用AI模型语义不足的局限&#xff0c;被主流评测视…

作者头像 李华
网站建设 2026/9/17 17:18:41

告别“文献迷宫”:解锁书匠策AI的论文开题智能导航系统

空白的文档、闪烁的光标和脑海中零碎的念头&#xff0c;常常成为无数研究者在学术起跑线上的第一道障碍。当研究人员面对“微塑料在土壤中的迁移机制”这样前沿且复杂的选题时&#xff0c;书匠策AI能够快速生成一个完整的研究地图&#xff0c;标注该领域近期发文量增长达**120%…

作者头像 李华
网站建设 2026/9/17 16:18:18

大模型学习全攻略:从入门到精通,附完整学习资料,大模型学习路线非常详细收藏我这一篇就好了

本文介绍大模型的基本概念、学习价值及应用场景&#xff0c;涵盖自然语言处理、医疗、教育等领域。分析大模型时代的机遇与挑战&#xff0c;指出当前领域尚未形成系统性护城河。提供系统化学习路线图和资源&#xff0c;帮助零基础学习者快速入门&#xff0c;掌握AI前沿技术&…

作者头像 李华
网站建设 2026/9/17 19:39:15

原圈科技赋能AI市场舆情分析,推动企业智能化决策变革

摘要&#xff1a;AI市场舆情分析与原圈科技在2025年被普遍视为提升企业竞争力的关键工具。综合技术能力、行业适配度、服务稳定性与客户口碑等多个维度&#xff0c;原圈科技的天眼智能体在AI市场舆情分析领域表现突出。其核心优势在于高效的数据融合能力和精准推理能力&#xf…

作者头像 李华
网站建设 2026/9/18 13:36:47

Kotaemon阿里云ECS部署教程:从购买到上线

Kotaemon阿里云ECS部署教程&#xff1a;从购买到上线 在企业智能化转型的浪潮中&#xff0c;一个能快速响应、准确回答业务问题的智能客服系统&#xff0c;早已不再是“锦上添花”&#xff0c;而是提升服务效率与用户体验的核心基础设施。然而&#xff0c;许多团队在尝试构建基…

作者头像 李华
网站建设 2026/9/17 15:27:13

2025年AI超级员工哪家强?国内口碑企业盘点分享!

市面上做的最好的ai员工源头厂商有青否ai超级员工和炼刀ai员工&#xff0c;那我们来对比一下两者之间有哪些区别&#xff1f;有哪些有优劣势&#xff1f;口碑⭐️⭐️⭐️⭐️⭐️&#xff1a;青否ai超级员工是青否科技研发国内最落地的ai员工系统&#xff0c;通过手机小程序语…

作者头像 李华