ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

如果像 AI 一样使用工具类

如果像 AI 一样使用工具类 如果像 AI 一样使用工具类一句话总结:AI 写代码的第一原则是能借就借,不手写轮子——判空找StringUtils,空安全找Objects,空集合找Collections,拼接找String.join。先用现成工具类,再谈自己造。相关文档:《如果像AI一样写Lambda-第3篇-转换与过滤-通俗版.md》——工具类方法正是方法引用::的天然原料。0. 比喻:五金店的现成工具写法比喻普通人的写法自己打铁造锤子,再敲钉子函数式写法去五金店借锤子AI lambda 简写借来的锤子直接挂上流水线(StringUtils::isNotBlank)1. StringUtils(commons-lang3):字符串处理之王① 普通人的写法:手写判空判白if(snull||s.trim().isEmpty()){return未知;}returns;② 函数式写法:StringUtils 一步到位returnStringUtils.defaultIfBlank(s,未知);③ AI lambda 简写:方法引用进 Stream// 校验整批字符串全部非空booleanallValidnames.stream().allMatch(StringUtils::isNotBlank);// 滤掉空白串ListStringvalidnames.stream().filter(StringUtils::isNotBlank).collect(Collectors.toList());高频清单:方法用途isBlank(s)/isNotBlank(s)判空(比isEmpty更狠,连空白串也算空)defaultIfBlank(s, 默认)空则给默认defaultString(s, 默认)null 则给默认substringBefore(s, ,)取分隔符前段,免 indexOf 手算join(集合, ,)拼接,比 JDK 版多了 null 跳过能力equals(a, b)null 安全的比较2. Objects:空安全操作① 普通人的写法:手写判空抛异常 / 判等if(argnull){thrownewIllegalArgumentException(arg 不能为空);}if(anull?bnull:a.equals(b)){...}② 函数式写法:Objects 一步到位Objects.requireNonNull(arg,arg 不能为空);if(Objects.equals(a,b)){...}③ AI lambda 简写:nonNull 进 filter(全系列最常出现的方法引用)ListStringcleanedlist.stream().filter(Objects::nonNull).collect(Collectors.toList());高频清单:方法用途requireNonNull(x)/(x, 提示)参数校验,空即炸equals(a, b)null 安全判等nonNull(x)/isNull(x)配合filter/anyMatchtoString(x, 默认)null 安全的 toString3. Collections:空集合与单元素集合① 普通人的写法:返回空集合还要 newpublicListStringfindNames(){if(noData){returnnewArrayList();// 每次都 new 一个}returnrealData;}② 函数式写法:Collections 复用不可变实例publicListStringfindNames(){if(noData){returnCollections.emptyList();}returnrealData;}③ AI lambda 简写:单元素也一样returnCollections.singletonList(first);高频清单:方法用途emptyList()/emptySet()/emptyMap()返回空集合,零开销且不可变singletonList(x)单元素列表,风格与 emptyList 统一unmodifiableList(list)只读包装注意:它们都不可变——emptyList().add(x)会炸;能保证调用方不改时才用,否则老老实实new ArrayList()。4. String 静态方法:join / format / valueOf① 普通人的写法:StringBuilder 手拼StringBuildersbnewStringBuilder();for(inti0;ilist.size();i){if(i0)sb.append(,);sb.append(list.get(i));}Stringresultsb.toString();② 函数式写法:String.join 一步到位StringresultString.join(,,list);③ AI lambda 简写:配合流式加工Stringresultnames.stream().filter(Objects::nonNull).collect(Collectors.joining(,));高频清单:方法用途join(,, iterable)拼接(列表直接拼首选)format(模板 %s, x)格式化,比 拼接可读valueOf(x)安全转字符串5. 借用原则:AI 的找轮子顺序拿到一个需求,AI 按这个顺序找工具:JDK 自带(Objects、Collections、String、Math)项目已引入的通用库(StringUtils、CollectionUtils、ListUtils)自己写私有静态方法——只有前两层都没有,才手写,而且会立刻配方法引用:privatestaticbooleanstartsWithAP(Stringname){returnname.startsWith(AP);}// 手写的工具方法一样能挂上流水线ListStringresultnames.stream().filter(NameRules::startsWithAP).collect(Collectors.toList());6. 陷阱:名字像,语义差坑 1:isBlank 比 isEmpty 严格 .isEmpty()// false(有内容,是个空格)StringUtils.isBlank( )// true(空白串算空)校验用户输入时用isBlank,判断字符串长度语义时用isEmpty,别混。坑 2:Objects.equals 与 equals 的调用方向// ❌ 常量在前才安全,变量在前可能 NPEbooleanokvalue.equals(CONSTANT);// ✅ Objects.equals 两端都 null 安全booleanokObjects.equals(value,CONSTANT);坑 3:Collections.emptyList() 不可变ListStringlistCollections.emptyList();list.add(x);// ❌ UnsupportedOperationException一页速记判空判白:StringUtils.isBlank / isNotBlank,校验输入用它空则默认:defaultIfBlank;null 安全判等:Objects.equals参数校验:Objects.requireNonNull(x, 提示),空即炸返回空集合:Collections.emptyList();单元素:singletonList;但都不可变拼接:String.join(,, list)直接拼,流式加工才用joining找轮子顺序:JDK → 已引入库 → 自己写静态方法(并配::)工具类方法天然是方法引用的原料:StringUtils::isNotBlank、Objects::nonNull
返回列表