字符串处理
org.apache.commons.lang3.StringUtils
方法 | 用途 |
---|---|
isBlank(字符串) | 判断字符串是否为空 |
isNotBlank(字符串) | 判断字符串是否不为空 |
isAnyBlank(final CharSequence... css) | 任意一个为空 |
isNoneBlank(final CharSequence... css) | 所有字符都不为空 |
equals(字符串a,字符串b) | 字符串是否相同 |
equalsIgnoreCase(final CharSequence cs1, final CharSequence cs2) | 字符串是否相同,忽略大小写 |
equalsAnyIgnoreCase(final CharSequence string, final CharSequence...searchStrings) | 指定字符串是否等于其中的任意一个字符串,searchStrings支持数组传入 |
split(字符串,分隔符) | 字符串分隔为数组 |
replace(待替换字符串,替换的字符串) | 替换字符串中指定的内容 |
defaultIfBlank(final T str, final T defaultStr) | 字符串为空则给默认值 |
upperCase(final String str) | 转为全大写 |
lowerCase(final String str) | 转为全小写 |
substring(final String str, int start) | 截取字符串 |
substringBeforeLast(final String str, final String separator) | 截取匹配的最后一段字符串的前面内容 |
indexOf(final CharSequence seq, final CharSequence searchSeq) | 字符的下标 |
indexOfIgnoreCase(final CharSequence str, final CharSequence searchStr, int startPos) | 字符串的下标忽略大小写 |
contains(final CharSequence seq, final CharSequence searchSeq) | 前面的字符串是否包含后面的字符串 |
startsWithIgnoreCase(final CharSequence str, final CharSequence prefix) | 以xxx开头忽略大小写 |
endsWith(final CharSequence str, final CharSequence suffix) | 字符串是否以xxx结尾 |
removeStart(final String str, final String remove) | 移除字符串开头的内容 |
removeEnd(final String str, final String remove) | 移除字符串结尾的内容 |
defaultIfBlank(final T str, final T defaultStr) | 如果字符串为空则返回默认值 |
remove(final String str, final String remove) | 移除匹配的内容 |
trim(final String str) | 去除前后空格 |
org.apache.commons.lang3.RegExUtils
方法 | 用途 |
---|---|
replaceAll(final String text, final String regex, final String replacement) | 用给定的替换项替换与给定正则表达式匹配的文本字符串的每个子字符串 |
org.apache.commons.lang3.math.NumberUtils
方法 | 用途 |
---|---|
replaceAll(final String text, final String regex, final String replacement) | 用给定的替换项替换与给定正则表达式匹配的文本字符串的每个子字符串 |
isParsable(final String str) | 检查给定字符串是否为可解析数 |
isCreatable(final String str) | 检查字符串是否为有效的Java数字 |
toScaledBigDecimal(final String value, final int scale, final RoundingMode roundingMode) | 将字符串转换为BigDecimal |
isDigits(final String str) | 检查字符串是否仅包含数字字符 |
isNumber(String str) | 检查字符串是否为有效的Java数字 |
集合处理
org.apache.commons.lang3.ArrayUtils
方法 | 用途 |
---|---|
contains | 是否包含某个字符串 |
addAll | 添加整个数组 |
clone | 克隆一个数组 |
isEmpty | 是否空数组 |
add | 向数组添加元素 |
subarray | 截取数组 |
indexOf | 查找某个元素的下标 |
isEquals | 比较数组是否相等 |
toObject | 基础类型数据数组转换为对应的Object数组 |
org.apache.commons.collections.CollectionUtils
方法 | 用途 |
---|---|
isEmpty(集合) | 判断集合list是否为空 |
isNotEmpty(集合) | 判断集合list是否不为空 |
org.apache.commons.collections4.ListUtils
方法 | 用途 |
---|---|
emptyIfNull(集合) | 如果参数为null,则返回不可变的空列表,否则返回参数本身 |
加密工具类
org.apache.commons.codec.digest.DigestUtils
方法 | 用途 |
---|---|
md5Hex | MD5加密,返回32位字符串 |
sha1Hex | SHA-1加密 |
sha256Hex | SHA-256加密 |
sha512Hex | SHA-512加密 |
md5 | MD5加密,返回16位字符串 |
属性properties文件操作
org.apache.commons.beanutils.PropertyUtils
方法 | 用途 |
---|---|
getProperty | 获取对象属性值 |
setProperty | 设置对象属性值 |
getPropertyDiscriptor | 获取属性描述器 |
isReadable | 检查属性是否可访问 |
copyProperties | 复制属性值,从一个对象到另一个对象 |
getPropertyDiscriptors | 获取所有属性描述器 |
isWriteable | 检查属性是否可写 |
getPropertyType | 获取对象属性类型 |
文件及文件夹操作
org.apache.commons.io.FileUtils
方法 | 用途 |
---|---|
deleteDirectory | 删除文件夹 |
readFileToString | 以字符形式读取文件内容 |
deleteQueitly | 删除文件或文件夹且不会抛出异常 |
copyFile | 复制文件 |
writeStringToFile | 把字符写到目标文件,如果文件不存在,则创建 |
forceMkdir | 强制创建文件夹,如果该文件夹父级目录不存在,则创建父级 |
write | 把字符写到指定文件中 |
listFiles | 列举某个目录下的文件(根据过滤器) |
copyDirectory | 复制文件夹 |
forceDelete | 强制删除文件 |
文件名操作
org.apache.commons.io.FilenameUtils
方法 | 用途 |
---|---|
getExtension | 返回文件后缀名 |
getBaseName | 返回文件名,不包含后缀名 |
getName | 返回文件全名 |
concat | 按命令行风格组合文件路径(详见方法注释) |
removeExtension | 删除后缀名 |
normalize | 使路径正常化 |
wildcardMatch | 匹配通配符 |
seperatorToUnix | 路径分隔符改成unix系统格式的,即/ |
getFullPath | 获取文件路径,不包括文件名 |
isExtension | 检查文件后缀名是不是传入参数(List<String>)中的一个 |
文件流工具类
org.apache.commons.io.IOUtils
方法 | 用途 |
---|---|
closeQuietly | 关闭一个IO流、socket、或者selector且不抛出异常,通常放在finally块 |
toString | 转换IO流、 Uri、 byte[]为String |
copy:IO | 流数据复制,从输入流写到输出流中,最大支持2GB |
toByteArray | 从输入流、URI获取byte[] |
write | 把字节. 字符等写入输出流 |
toInputStream | 把字符转换为输入流 |
readLines | 从输入流中读取多行数据,返回List<String> |
copyLarge | 同copy,支持2GB以上数据的复制 |
lineIterator | 从输入流返回一个迭代器,根据参数要求读取的数据量,全部读取,如果数据不够,则失败 |
转义工具类
org.apache.commons.lang3.StringEscapeUtils
方法 | 用途 |
---|---|
escapeHtml4() | 转义html |
unescapeHtml4() | 反转义html |
escapeJava() | 转义java |
unescapeJava() | 反转义java |
对象操作
org.apache.http.util.EntityUtils
方法 | 用途 |
---|---|
toString() | 把Entity转换为字符串 |
对象复制
org.springframework.beans.BeanUtils
方法 | 用途 |
---|---|
copyProperties(Object source, Object target) | 将1个对象中属性值复制到另一个对象中,注意参数类型保持一致,参数名相同 |
Guava工具类
com.google.common.collect.ImmutableSet
方法 | 用途 |
---|---|
ImmutableSet<String> set1 = ImmutableSet.of("xxx", "xxx"); | 创建不可变集合 |
ImmutableSet<Object> set2 = ImmutableSet.builder() .add("xxx") .add("xxx") .build(); | 创建不可变集合 |
ArrayList<String> list = Lists.newArrayList("xxx", "xxx"); | 创建可变集合 |
com.google.common.collect.Ordering
方法 | 用途 |
---|---|
ArrayList<Integer> list = Lists.newArrayList(12, 3, 1, 5, 6,null);list.sort(Ordering.natural().nullsFirst()); | //从大到小排序,null值排在前面 |
hutool工具类
Convert 类型转换工具类,用于各种类型数据的转换
方法 | 用途 |
---|---|
toStr(Object value, String defaultValue) | 转换为字符串 |
toStrArray(Object value) | 转换为String数组 |
toList(Class<T> elementType, Object value) | 转换为ArrayList |
DateUtil 日期时间工具类,定义了一些常用的日期时间操作方法
方法 | 用途 |
---|---|
now() | 当前日期时间 yyyy-MM-dd HH:mm:ss |
today() | 今天日期 yyyy-MM-dd |
currentSeconds() | 毫秒数 |
thisYear() | 年份 |
thisMonth() | 月份(从0开始) |
thisWeekOfMonth() | 本月周次(从1开始) |
thisWeekOfYear() | 本年周次(从1开始) |
thisDayOfMonth() | 本月第几天(从1开始) |
thisDayOfWeek() | 本周第几天(从1开始) |
thisHour(boolean is24HourClock) | 当前小时 |
thisMinute() | 当前分 |
thisSecond() | 当前秒 |
lastWeek() | 上周今天(往前7天) |
lastMonth() | 上个月今天(往前一个月) |
nextWeek() | 下周今天(往后7天) |
nextMonth() | 下个月今天(往后一个月) |
yesterday() | 昨天同时 |
tomorrow() | 明天同时 |
StrUtil 字符串工具类,定义了一些常用的字符串操作方法
方法 | 用途 |
---|---|
isBlank(CharSequence str) | 字符串是否为空 |
StrPool 字符串常量
方法 | 用途 |
---|---|
TAB | 制表符 "\t" |
DOT | 点 "." |
SLASH | 斜杠 "/" |
CR | 回车符 "\r" |
LF | 换行符 "\n" |
CRLF | Windows 换行 "\r\n" |
UNDERLINE | 下划线 "_" |
DASHED | 减号(连接符) "-" |
COMMA | 逗号 "," |
DELIM_START | 花括号(左) "{" |
DELIM_END | 花括号(右) "}" |
BRACKET_START | 中括号(左) "[" |
BRACKET_END | 中括号(右) "]" |
COLON | 冒号 ":" |
AT | 艾特 "@" |
EMPTY_JSON | 空 JSON "{}" |
CollUtil 集合操作的工具类,定义了一些常用的集合操作。
方法 | 用途 |
---|---|
isEmpty(Collection<?> collection) | 集合是否为空 |
isNotEmpty(Collection<?> collection) | 集合是否为非空 |
MapUtil Map操作工具类,可用于创建Map对象及判断Map是否为空。
方法 | 用途 |
---|---|
isEmpty(Map<?, ?> map) | Map是否为空 |
isNotEmpty(Map<?, ?> map) | Map是否为非空 |
ArrayUtil 数组操作工具类
方法 | 用途 |
---|---|
containsIgnoreCase(CharSequence[] array, CharSequence value) | 数组中是否包含元素,忽略大小写 |
isEmpty(T[] array) | 数组是否为空 |
isNotEmpty(T[] array) | 数组是否为非空 |
toArray(Collection<T> collection, Class<T> componentType) | 将集合转为数组 |
HttpUtil 基于HttpUrlConnection的Http客户端封装
方法 | 用途 |
---|---|
post(String urlString, String body, int timeout) | 发送post请求 |
stream常用流操作,优点:代码简便,大部分操作不修改原有集合
方法 | 注释 |
---|---|
集合.stream() | 将集合转为stream流 |
流.filter(x -> 布尔条件) | 过滤布尔条件为true的数据出来 |
流.collect(Collectors.toList()) | 收集结果集为list |
流.collect(Collectors.groupingBy(对象::属性) | 按照xx分组转为map |
流.collect(Collectors.toMap(对象::属性, a -> a, (k1, k2) -> k1)) | 集合转map,取其中一个参数作为key,value取第一个 |
流.collect(Collectors.toMap(对象::属性, Function.identity(), (key1, key2) -> key2)) | 集合转map,取其中一个参数作为key,value取第二个 |
流.map(对象::属性) | 获取流的对象中的某个属性值 |
流.forEach(f -> console.log(f)) | 循环,一般不建议循环赋值操作,而是使用普通循环,如for循环或迭代器等循环 |
流.collect(Collectors.joining(",")) | 将流转逗号分隔的的字符串,一般是字符串流转为字符串 |
流.collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(对象::属性))), ArrayList::new)) | 按照某个属性去重 |
流.distinct() | 筛选,通过流所生成元素的 hashCode() 和 equals() 去重 |
流.collect(Collectors.groupingBy(对象::属性, TreeMap::new, Collectors.toList())) | 转为treemap |
流.collect(Collectors.toSet()) | 转为set集合 |
流.collect(Collectors.groupingBy(x-> x.getA()+"_"+ x.getB())) | 按照多参数拼接方式分组,返回map |
流.sorted() | 自然排序 |
Stream.of(1, 2, 3, 5) | 将内容转为流 |
流.limit(long maxSize) | 截断流,使其元素不超过给定数量 |
流.skip(long n) | 跳过元素,返回一个扔掉了前 n 个元素的流。若流中元素不足 n 个,则返回一个空流。与 limit(n) 互补 |
流.sum() | 值求和 |
创建Stream
Java8 中的Collection接口被扩展,提供了两个获取流的方法:
- default Stream stream() : 返回一个顺序流
- default Stream parallelStream() : 返回一个并行流
可以使用静态方法 Stream.of(), 通过显示值创建一个流。它可以接收任意数量的参数。
- public static Stream of(T… values) : 返回一个流
Stream 的中间操作
多个中间操作可以连接起来形成一个流水线,除非流水线上触发终止操作,否则中间操作不会执行任何的处理!而在终止操作时一次性全部处理,称为“惰性求值”。
筛选与切片
方 法 | 描 述 |
---|---|
filter(Predicate p) | 接收 Lambda , 从流中排除某些元素。 |
distinct() | 筛选,通过流所生成元素的 hashCode() 和 equals() 去除重复元素 |
limit(long maxSize) | 截断流,使其元素不超过给定数量。 |
skip(long n) | 跳过元素,返回一个扔掉了前 n 个元素的流。若流中元素不足 n 个,则返回一个空流。与 limit(n) 互补 |
映射
方 法 | 描 述 |
---|---|
map(Function f) | 接收一个函数作为参数,该函数会被应用到每个元素上,并将其映射成一个新的元素。 |
mapToDouble(ToDoubleFunction f) | 接收一个函数作为参数,该函数会被应用到每个元素上,产生一个新的DoubleStream。 |
mapToInt(ToIntFunction f) | 接收一个函数作为参数,该函数会被应用到每个元素上,产生一个新的 IntStream。 |
mapToLong(ToLongFunction f) | 接收一个函数作为参数,该函数会被应用到每个元素上,产生一个新的 LongStream。 |
flatMap(Function f) | 接收一个函数作为参数,将流中的每个值都换成另一个流,然后把所有流连接成一个流 |
排序
方 法 | 描 述 |
---|---|
sorted() | 产生一个新流,其中按自然顺序排序 |
sorted(Comparator comp) | 产生一个新流,其中按比较器顺序排序 |
Stream 的终止操作
终端操作会从流的流水线生成结果。其结果可以是任何不是流的值,例如:List、Integer,甚至是 void 。
查找与匹配
方 法 | 描 述 |
---|---|
allMatch(Predicate p) | 检查是否匹配所有元素 |
anyMatch(Predicate p) | 检查是否至少匹配一个元素 |
noneMatch(Predicate p) | 检查是否没有匹配所有元素 |
findFirst() | 返回第一个元素 |
findAny() | 返回当前流中的任意元素返回第一个元素 |
count() | 返回流中元素总数 |
max(Comparator c) | 返回流中最大值 |
min(Comparator c | 返回流中最小值 |
forEach(Consumer c) | 内部迭代(使用 Collection接口需要用户去做迭代,称为外部迭代。相反,StreamAPI 使用内部迭代——它帮你把迭代做了) |
归约
方 法 | 描 述 |
---|---|
reduce(T iden, BinaryOperator b) | 可以将流中元素反复结合起来,得到一个值。 返回 T |
reduce(BinaryOperator b) | reduce(BinaryOperator b) 可以将流中元素反复结合起来,得到一个值。返回 Optional |
备注: map 和 reduce 的连接通常称为map-reduce 模式,因 Google 用它来进行网络搜索而出名。
收集
方 法 | 描 述 |
---|---|
collect(Collector c) | 将流转换为其他形式。接收一个Collector接口的实现,用于给Stream中元素做汇的方法 |
Collector 接口中方法的实现决定了如何对流执行收集操作(如收集到 List、Set、Map)。但是Collectors 实用类提供了很多静态方法,可以方便地创建常见收集器实例,具体方法与实例如下表:
方法 | 返回类型 | 作用 | 例子 |
---|---|---|---|
toList | List | 把流中元素收集到List | List emps= list.stream().collect(Collectors.toList()); |
toSet | Set | 把流中元素收集到Set | Set emps= list.stream().collect(Collectors.toSet()); |
toCollection | Collection | 把流中元素收集到创建的集合 | Collectionemps=list.stream().collect(Collectors.toCollection(ArrayList::new)); |
counting | Long | 计算流中元素的个数 | long count = list.stream().collect(Collectors.counting()); |
summingInt | Integer | 对流中元素的整数属性求和 | inttotal=list.stream().collect(Collectors.summingInt(Employee::getSalary)); |
averagingInt | Double | 计算流中元素Integer属性的平均值 | doubleavg= list.stream().collect(Collectors.averagingInt(Employee::getSalary)); |
summarizingInt | IntSummaryStatistics | 收集流中Integer属性的统计值。 如:平均值 | IntSummaryStatisticsiss= list.stream().collect(Collectors.summarizingInt(Employee::getSalary)); |
joining | String | 连接流中每个字符串 | String str= list.stream().map(Employee::getName).collect(Collectors.joining()); |
maxBy | Optional | 根据比较器选择最大值 | Optionalmax= list.stream().collect(Collectors.maxBy(comparingInt(Employee::getSalary))); |
minBy | Optional | 根据比较器选择最小值 | Optional min = list.stream().collect(Collectors.minBy(comparingInt(Employee::getSalary))); |
reducing | 归约产生的类型 | 从一个作为累加器的初始值开始,利用BinaryOperator与流中元素逐个结合,从而归约成单个值 | inttotal=list.stream().collect(Collectors.reducing(0, Employee::getSalar, Integer::sum)); |
collectingAndThen | 转换函数返回的类型 | 包裹另一个收集器,对其结果转换函数 | inthow= list.stream().collect(Collectors.collectingAndThen(Collectors.toList(), List::size)); |
groupingBy | Map<K, List> | 根据某属性值对流分组,属性为K,结果为V | Map<Emp.Status, List> map= list.stream().collect(Collectors.groupingBy(Employee::getStatus)); |
partitioningBy | partitioningBy Map<Boolean, List> | 根据true或false进行分区 | Map<Boolean,List>vd= list.stream().collect(Collectors.partitioningBy(Employee::getManage)); |