网站建设文献英文,阿里云网站建设模板,网络营销网站建设案例,wordpress 弹出登录页文章目录Ⅰ. Stream API一、Stream 创建方式二、中间操作#xff08;返回新的 Stream#xff0c;可链式调用#xff09;三、终止操作#xff08;触发流处理#xff0c;返回具体结果#xff09;Ⅱ. Optional 类Ⅲ. 两者结合的一个例子Ⅳ. 正则表达式#x1f9e0; 1. 基础…文章目录Ⅰ. 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 等StreamIntegersStream.of(1,2,3,4).filter(x-x2)// 中间操作返回流.map(x-x*10);// 中间操作返回流// 到这里还没执行s 只是描述了一条“流水线”ListIntegerlists.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 - n1)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聚合结果reduce、count、min、max布尔判断anyMatch、allMatch、noneMatch单元素findFirst、findAny遍历/副作用forEach方法说明返回值类型示例forEach(Consumer)遍历元素无返回voidstream.forEach(System.out::println)toArray()转数组Object[] 或 T[]stream.toArray()collect(Collector)收集结果泛型 R常见List、Set、Mapstream.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 类OptionalT是一个可能包含值也可能为空的容器对象它替代了传统的null返回用更安全、明确、链式的方式处理值的存在或缺失。常用方法如下所示方法名返回值说明of(T value)Optional创建非空的 Optional传 null 会抛异常ofNullable(T value)Optional创建 Optional允许 nullempty()Optional创建一个空的 OptionalisPresent()boolean判断是否有值true/falseifPresent(Consumer)void如果有值就执行某个操作get()T获取值若为空会抛 NoSuchElementExceptionorElse(T other)T若有值则返回否则返回默认值总会执行传入的表达式无论是否为空orElseGet(Supplier)T若有值返回否则调用函数获取默认值只有为空才会执行传入的表达式orElseThrow()T若为空抛异常默认抛 NoSuchElementExceptionorElseThrow(Supplier)T若为空抛自定义异常map(Function)Optional对值做转换操作包装成新的 OptionalflatMap(Function)Optional链式调用避免嵌套 Optionalfilter(Predicate)Optional判断值是否满足条件不满足则变成 empty注意事项❌不要用get()随意取值如果值为 null 会直接抛异常。✅ 推荐始终使用orElse/ifPresent等方法来处理 Optional。// 创建一个optional对象OptionalStringoptionalNameOptional.of(lirendada);// 1. 是否有值optionalName.isPresent();// true// 2. 如果有值就打印optionalName.ifPresent(name-System.out.println(Name: name));// 3. 获取值不推荐直接用 getStringnameoptionalName.get();// 4. 如果为空则返回默认值StringvalueOptional.ofNullable(null).orElse(默认值);// 默认值// 5. 用 orElseGet 延迟执行StringvOptional.ofNullable(null).orElseGet(()-getDefault());// 6. 为空则抛异常StringerrorOptional.ofNullable(null).orElseThrow(()-newIllegalArgumentException(值不能为空));// 7. 转换值mapOptionalIntegernameLengthoptionalName.map(String::length);// 8. 链式调用 判断StringresultOptional.of(lirendada).filter(s-s.length()5).map(String::toUpperCase).orElse(太短了);// 输出LIRENDADAⅢ. 两者结合的一个例子findFirst()是 Java Stream 中的一个终止操作Terminal Operation作用是在过滤或处理后的流中返回“第一个匹配的元素”包装在Optional中。如果不用findFirst()结束的话就会得到一个无限的 Stream 流对象而不是最终的PrizeEntity元素。OptionalPrizeEntityoptionalPrizeDTOprizes.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 次或多次abcabc,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非数字\Dabc\w单词字符[a-zA-Z0-9_]\wabc_123\W非单词字符\W#!\s空白字符空格、Tab、换行\s 、\t、\n\S非空白字符\Sabc123\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}$;booleanisValidPattern.matches(regex,13812345678); 字符串提取PatternpatternPattern.compile(\\d);Matchermatcherpattern.matcher(abc123xyz456);while(matcher.find()){System.out.println(matcher.group());// 输出 123 和 456}