This commit is contained in:
Looly 2022-04-28 03:31:23 +08:00
parent 8e2c06c671
commit 75be3ebae4
51 changed files with 113 additions and 103 deletions

View File

@ -1,4 +1,4 @@
package cn.hutool.core.lang; package cn.hutool.core.cache;
import cn.hutool.core.collection.TransIter; import cn.hutool.core.collection.TransIter;
import cn.hutool.core.lang.func.Func0; import cn.hutool.core.lang.func.Func0;

View File

@ -1,13 +1,13 @@
package cn.hutool.core.collection; package cn.hutool.core.collection;
import cn.hutool.core.lang.Assert; import cn.hutool.core.lang.Assert;
import cn.hutool.core.lang.Filter;
import java.util.Iterator; import java.util.Iterator;
import java.util.NoSuchElementException; import java.util.NoSuchElementException;
import java.util.function.Predicate;
/** /**
* 包装 {@link Iterator}并根据{@link Filter}定义过滤元素输出<br> * 包装 {@link Iterator}并根据{@link Predicate}定义过滤元素输出<br>
* 类实现来自Apache Commons Collection * 类实现来自Apache Commons Collection
* *
* @author apache commons, looly * @author apache commons, looly
@ -16,7 +16,7 @@ import java.util.NoSuchElementException;
public class FilterIter<E> implements Iterator<E> { public class FilterIter<E> implements Iterator<E> {
private final Iterator<? extends E> iterator; private final Iterator<? extends E> iterator;
private final Filter<? super E> filter; private final Predicate<? super E> filter;
/** /**
* 下一个元素 * 下一个元素
@ -33,7 +33,7 @@ public class FilterIter<E> implements Iterator<E> {
* @param iterator 被包装的{@link Iterator} * @param iterator 被包装的{@link Iterator}
* @param filter 过滤函数{@code null}表示不过滤 * @param filter 过滤函数{@code null}表示不过滤
*/ */
public FilterIter(final Iterator<? extends E> iterator, final Filter<? super E> filter) { public FilterIter(final Iterator<? extends E> iterator, final Predicate<? super E> filter) {
this.iterator = Assert.notNull(iterator); this.iterator = Assert.notNull(iterator);
this.filter = filter; this.filter = filter;
} }
@ -74,7 +74,7 @@ public class FilterIter<E> implements Iterator<E> {
* *
* @return 过滤函数可能为{@code null} * @return 过滤函数可能为{@code null}
*/ */
public Filter<? super E> getFilter() { public Predicate<? super E> getFilter() {
return filter; return filter;
} }
@ -84,7 +84,7 @@ public class FilterIter<E> implements Iterator<E> {
private boolean setNextObject() { private boolean setNextObject() {
while (iterator.hasNext()) { while (iterator.hasNext()) {
final E object = iterator.next(); final E object = iterator.next();
if (null != filter && filter.accept(object)) { if (null != filter && filter.test(object)) {
nextObject = object; nextObject = object;
nextObjectSet = true; nextObjectSet = true;
return true; return true;

View File

@ -27,6 +27,7 @@ import java.util.Map.Entry;
import java.util.Objects; import java.util.Objects;
import java.util.function.Consumer; import java.util.function.Consumer;
import java.util.function.Function; import java.util.function.Function;
import java.util.function.Predicate;
/** /**
* {@link Iterable} {@link Iterator} 相关工具类 * {@link Iterable} {@link Iterator} 相关工具类
@ -753,7 +754,7 @@ public class IterUtil {
* @return ArrayList * @return ArrayList
* @since 5.7.22 * @since 5.7.22
*/ */
public static <E> List<E> filterToList(Iterator<E> iter, Filter<E> filter) { public static <E> List<E> filterToList(Iterator<E> iter, Predicate<E> filter) {
return toList(filtered(iter, filter)); return toList(filtered(iter, filter));
} }
@ -766,7 +767,7 @@ public class IterUtil {
* @return {@link FilterIter} * @return {@link FilterIter}
* @since 5.8.0 * @since 5.8.0
*/ */
public static <E> FilterIter<E> filtered(final Iterator<? extends E> iterator, final Filter<? super E> filter) { public static <E> FilterIter<E> filtered(final Iterator<? extends E> iterator, final Predicate<? super E> filter) {
return new FilterIter<>(iterator, filter); return new FilterIter<>(iterator, filter);
} }

View File

@ -206,7 +206,7 @@ public class FileCopier extends SrcToDestCopier<File, FileCopier>{
* @throws IORuntimeException IO异常 * @throws IORuntimeException IO异常
*/ */
private void internalCopyDirContent(File src, File dest) throws IORuntimeException { private void internalCopyDirContent(File src, File dest) throws IORuntimeException {
if (null != copyFilter && false == copyFilter.accept(src)) { if (null != copyPredicate && false == copyPredicate.test(src)) {
//被过滤的目录跳过 //被过滤的目录跳过
return; return;
} }
@ -249,7 +249,7 @@ public class FileCopier extends SrcToDestCopier<File, FileCopier>{
* @throws IORuntimeException IO异常 * @throws IORuntimeException IO异常
*/ */
private void internalCopyFile(File src, File dest) throws IORuntimeException { private void internalCopyFile(File src, File dest) throws IORuntimeException {
if (null != copyFilter && false == copyFilter.accept(src)) { if (null != copyPredicate && false == copyPredicate.test(src)) {
//被过滤的文件跳过 //被过滤的文件跳过
return; return;
} }

View File

@ -4,7 +4,6 @@ import cn.hutool.core.collection.EnumerationIter;
import cn.hutool.core.collection.IterUtil; import cn.hutool.core.collection.IterUtil;
import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.FileUtil;
import cn.hutool.core.io.IORuntimeException; import cn.hutool.core.io.IORuntimeException;
import cn.hutool.core.lang.Filter;
import cn.hutool.core.util.CharsetUtil; import cn.hutool.core.util.CharsetUtil;
import cn.hutool.core.util.ClassLoaderUtil; import cn.hutool.core.util.ClassLoaderUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
@ -17,6 +16,7 @@ import java.net.URL;
import java.nio.charset.Charset; import java.nio.charset.Charset;
import java.util.Enumeration; import java.util.Enumeration;
import java.util.List; import java.util.List;
import java.util.function.Predicate;
/** /**
* Resource资源工具类 * Resource资源工具类
@ -155,7 +155,7 @@ public class ResourceUtil {
* @param filter 过滤器用于过滤不需要的资源{@code null}表示不过滤保留所有元素 * @param filter 过滤器用于过滤不需要的资源{@code null}表示不过滤保留所有元素
* @return 资源列表 * @return 资源列表
*/ */
public static List<URL> getResources(String resource, Filter<URL> filter) { public static List<URL> getResources(String resource, Predicate<URL> filter) {
return IterUtil.filterToList(getResourceIter(resource), filter); return IterUtil.filterToList(getResourceIter(resource), filter);
} }

View File

@ -16,6 +16,7 @@ import java.nio.charset.Charset;
import java.util.Collections; import java.util.Collections;
import java.util.HashSet; import java.util.HashSet;
import java.util.Set; import java.util.Set;
import java.util.function.Predicate;
import java.util.jar.JarEntry; import java.util.jar.JarEntry;
import java.util.jar.JarFile; import java.util.jar.JarFile;
@ -48,7 +49,7 @@ public class ClassScanner implements Serializable {
/** /**
* 过滤器 * 过滤器
*/ */
private final Filter<Class<?>> classFilter; private final Predicate<Class<?>> classPredicate;
/** /**
* 编码 * 编码
*/ */
@ -151,7 +152,7 @@ public class ClassScanner implements Serializable {
* @return 类集合 * @return 类集合
* @since 5.7.5 * @since 5.7.5
*/ */
public static Set<Class<?>> scanAllPackage(String packageName, Filter<Class<?>> classFilter) { public static Set<Class<?>> scanAllPackage(String packageName, Predicate<Class<?>> classFilter) {
return new ClassScanner(packageName, classFilter).scan(true); return new ClassScanner(packageName, classFilter).scan(true);
} }
@ -164,7 +165,7 @@ public class ClassScanner implements Serializable {
* @param classFilter class过滤器过滤掉不需要的class * @param classFilter class过滤器过滤掉不需要的class
* @return 类集合 * @return 类集合
*/ */
public static Set<Class<?>> scanPackage(String packageName, Filter<Class<?>> classFilter) { public static Set<Class<?>> scanPackage(String packageName, Predicate<Class<?>> classFilter) {
return new ClassScanner(packageName, classFilter).scan(); return new ClassScanner(packageName, classFilter).scan();
} }
@ -188,26 +189,26 @@ public class ClassScanner implements Serializable {
* 构造默认UTF-8编码 * 构造默认UTF-8编码
* *
* @param packageName 包名所有包传入""或者null * @param packageName 包名所有包传入""或者null
* @param classFilter 过滤器无需传入null * @param classPredicate 过滤器无需传入null
*/ */
public ClassScanner(String packageName, Filter<Class<?>> classFilter) { public ClassScanner(String packageName, Predicate<Class<?>> classPredicate) {
this(packageName, classFilter, CharsetUtil.CHARSET_UTF_8); this(packageName, classPredicate, CharsetUtil.CHARSET_UTF_8);
} }
/** /**
* 构造 * 构造
* *
* @param packageName 包名所有包传入""或者null * @param packageName 包名所有包传入""或者null
* @param classFilter 过滤器无需传入null * @param classPredicate 过滤器无需传入null
* @param charset 编码 * @param charset 编码
*/ */
public ClassScanner(String packageName, Filter<Class<?>> classFilter, Charset charset) { public ClassScanner(String packageName, Predicate<Class<?>> classPredicate, Charset charset) {
packageName = StrUtil.nullToEmpty(packageName); packageName = StrUtil.nullToEmpty(packageName);
this.packageName = packageName; this.packageName = packageName;
this.packageNameWithDot = StrUtil.addSuffixIfNot(packageName, StrUtil.DOT); this.packageNameWithDot = StrUtil.addSuffixIfNot(packageName, StrUtil.DOT);
this.packageDirName = packageName.replace(CharUtil.DOT, File.separatorChar); this.packageDirName = packageName.replace(CharUtil.DOT, File.separatorChar);
this.packagePath = packageName.replace(CharUtil.DOT, CharUtil.SLASH); this.packagePath = packageName.replace(CharUtil.DOT, CharUtil.SLASH);
this.classFilter = classFilter; this.classPredicate = classPredicate;
this.charset = charset; this.charset = charset;
} }
@ -392,8 +393,8 @@ public class ClassScanner implements Serializable {
*/ */
private void addIfAccept(Class<?> clazz) { private void addIfAccept(Class<?> clazz) {
if (null != clazz) { if (null != clazz) {
Filter<Class<?>> classFilter = this.classFilter; Predicate<Class<?>> classFilter = this.classPredicate;
if (classFilter == null || classFilter.accept(clazz)) { if (classFilter == null || classFilter.test(clazz)) {
this.classes.add(clazz); this.classes.add(clazz);
} }
} }

View File

@ -1,8 +1,7 @@
package cn.hutool.core.lang.copier; package cn.hutool.core.lang.copier;
import java.io.Serializable; import java.io.Serializable;
import java.util.function.Predicate;
import cn.hutool.core.lang.Filter;
/** /**
* 复制器抽象类<br> * 复制器抽象类<br>
@ -22,7 +21,7 @@ public abstract class SrcToDestCopier<T, C extends SrcToDestCopier<T, C>> implem
/** 目标 */ /** 目标 */
protected T dest; protected T dest;
/** 拷贝过滤器,可以过滤掉不需要拷贝的源 */ /** 拷贝过滤器,可以过滤掉不需要拷贝的源 */
protected Filter<T> copyFilter; protected Predicate<T> copyPredicate;
//-------------------------------------------------------------------------------------------------------- Getters and Setters start //-------------------------------------------------------------------------------------------------------- Getters and Setters start
/** /**
@ -68,18 +67,18 @@ public abstract class SrcToDestCopier<T, C extends SrcToDestCopier<T, C>> implem
* 获得过滤器 * 获得过滤器
* @return 过滤器 * @return 过滤器
*/ */
public Filter<T> getCopyFilter() { public Predicate<T> getCopyPredicate() {
return copyFilter; return copyPredicate;
} }
/** /**
* 设置过滤器 * 设置过滤器
* *
* @param copyFilter 过滤器 * @param copyPredicate 过滤器
* @return this * @return this
*/ */
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public C setCopyFilter(Filter<T> copyFilter) { public C setCopyPredicate(Predicate<T> copyPredicate) {
this.copyFilter = copyFilter; this.copyPredicate = copyPredicate;
return (C)this; return (C)this;
} }
//-------------------------------------------------------------------------------------------------------- Getters and Setters end //-------------------------------------------------------------------------------------------------------- Getters and Setters end

View File

@ -1,6 +1,6 @@
package cn.hutool.core.lang.generator; package cn.hutool.core.lang.generator;
import cn.hutool.core.lang.ObjectId; import cn.hutool.core.lang.id.ObjectId;
/** /**
* ObjectId生成器 * ObjectId生成器

View File

@ -1,6 +1,6 @@
package cn.hutool.core.lang.generator; package cn.hutool.core.lang.generator;
import cn.hutool.core.lang.Snowflake; import cn.hutool.core.lang.id.Snowflake;
/** /**
* Snowflake生成器<br> * Snowflake生成器<br>

View File

@ -1,7 +1,4 @@
package cn.hutool.core.lang; package cn.hutool.core.lang.hash;
import cn.hutool.core.lang.hash.Hash32;
import cn.hutool.core.util.HashUtil;
import java.io.Serializable; import java.io.Serializable;
import java.util.Collection; import java.util.Collection;
@ -10,26 +7,33 @@ import java.util.TreeMap;
/** /**
* 一致性Hash算法 * 一致性Hash算法
* 算法详解http://blog.csdn.net/sparkliang/article/details/5279393 * 算法详解<a href="http://blog.csdn.net/sparkliang/article/details/5279393">http://blog.csdn.net/sparkliang/article/details/5279393</a>
* 算法实现https://weblogs.java.net/blog/2007/11/27/consistent-hashing * 算法实现<a href="https://weblogs.java.net/blog/2007/11/27/consistent-hashing">https://weblogs.java.net/blog/2007/11/27/consistent-hashing</a>
* @author xiaoleilu
* *
* @param <T> 节点类型 * @param <T> 节点类型
* @author xiaoleilu
*/ */
public class ConsistentHash<T> implements Serializable{ public class ConsistentHash<T> implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
/** Hash计算对象用于自定义hash算法 */ /**
* Hash计算对象用于自定义hash算法
*/
Hash32<Object> hashFunc; Hash32<Object> hashFunc;
/** 复制的节点个数 */ /**
* 复制的节点个数
*/
private final int numberOfReplicas; private final int numberOfReplicas;
/** 一致性Hash环 */ /**
* 一致性Hash环
*/
private final SortedMap<Integer, T> circle = new TreeMap<>(); private final SortedMap<Integer, T> circle = new TreeMap<>();
/** /**
* 构造使用Java默认的Hash算法 * 构造使用Java默认的Hash算法
*
* @param numberOfReplicas 复制的节点个数增加每个节点的复制节点有利于负载均衡 * @param numberOfReplicas 复制的节点个数增加每个节点的复制节点有利于负载均衡
* @param nodes 节点对象 * @param nodes 节点对象
*/ */
public ConsistentHash(int numberOfReplicas, Collection<T> nodes) { public ConsistentHash(int numberOfReplicas, Collection<T> nodes) {
this.numberOfReplicas = numberOfReplicas; this.numberOfReplicas = numberOfReplicas;
@ -45,9 +49,10 @@ public class ConsistentHash<T> implements Serializable{
/** /**
* 构造 * 构造
* @param hashFunc hash算法对象 *
* @param hashFunc hash算法对象
* @param numberOfReplicas 复制的节点个数增加每个节点的复制节点有利于负载均衡 * @param numberOfReplicas 复制的节点个数增加每个节点的复制节点有利于负载均衡
* @param nodes 节点对象 * @param nodes 节点对象
*/ */
public ConsistentHash(Hash32<Object> hashFunc, int numberOfReplicas, Collection<T> nodes) { public ConsistentHash(Hash32<Object> hashFunc, int numberOfReplicas, Collection<T> nodes) {
this.numberOfReplicas = numberOfReplicas; this.numberOfReplicas = numberOfReplicas;
@ -63,6 +68,7 @@ public class ConsistentHash<T> implements Serializable{
* 每增加一个节点就会在闭环上增加给定复制节点数<br> * 每增加一个节点就会在闭环上增加给定复制节点数<br>
* 例如复制节点数是2则每调用此方法一次增加两个虚拟节点这两个节点指向同一Node * 例如复制节点数是2则每调用此方法一次增加两个虚拟节点这两个节点指向同一Node
* 由于hash算法会调用node的toString方法故按照toString去重 * 由于hash算法会调用node的toString方法故按照toString去重
*
* @param node 节点对象 * @param node 节点对象
*/ */
public void add(T node) { public void add(T node) {
@ -73,6 +79,7 @@ public class ConsistentHash<T> implements Serializable{
/** /**
* 移除节点的同时移除相应的虚拟节点 * 移除节点的同时移除相应的虚拟节点
*
* @param node 节点对象 * @param node 节点对象
*/ */
public void remove(T node) { public void remove(T node) {
@ -83,6 +90,7 @@ public class ConsistentHash<T> implements Serializable{
/** /**
* 获得一个最近的顺时针节点 * 获得一个最近的顺时针节点
*
* @param key 为给定键取Hash取得顺时针方向上最近的一个虚拟节点对应的实际节点 * @param key 为给定键取Hash取得顺时针方向上最近的一个虚拟节点对应的实际节点
* @return 节点对象 * @return 节点对象
*/ */
@ -92,7 +100,7 @@ public class ConsistentHash<T> implements Serializable{
} }
int hash = hashFunc.hash32(key); int hash = hashFunc.hash32(key);
if (false == circle.containsKey(hash)) { if (false == circle.containsKey(hash)) {
SortedMap<Integer, T> tailMap = circle.tailMap(hash); //返回此映射的部分视图其键大于等于 hash SortedMap<Integer, T> tailMap = circle.tailMap(hash); //返回此映射的部分视图其键大于等于 hash
hash = tailMap.isEmpty() ? circle.firstKey() : tailMap.firstKey(); hash = tailMap.isEmpty() ? circle.firstKey() : tailMap.firstKey();
} }
//正好命中 //正好命中

View File

@ -1,9 +1,4 @@
package cn.hutool.core.util; package cn.hutool.core.lang.hash;
import cn.hutool.core.lang.hash.CityHash;
import cn.hutool.core.lang.hash.MetroHash;
import cn.hutool.core.lang.hash.MurmurHash;
import cn.hutool.core.lang.hash.Number128;
/** /**
* Hash算法大全<br> * Hash算法大全<br>

View File

@ -2,11 +2,7 @@ package cn.hutool.core.lang.id;
import cn.hutool.core.exceptions.UtilException; import cn.hutool.core.exceptions.UtilException;
import cn.hutool.core.lang.Assert; import cn.hutool.core.lang.Assert;
import cn.hutool.core.lang.ObjectId;
import cn.hutool.core.lang.Singleton; import cn.hutool.core.lang.Singleton;
import cn.hutool.core.lang.Snowflake;
import cn.hutool.core.lang.id.UUID;
import cn.hutool.core.lang.id.NanoId;
import cn.hutool.core.net.NetUtil; import cn.hutool.core.net.NetUtil;
import cn.hutool.core.util.RuntimeUtil; import cn.hutool.core.util.RuntimeUtil;

View File

@ -1,4 +1,4 @@
package cn.hutool.core.lang; package cn.hutool.core.lang.id;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ClassLoaderUtil; import cn.hutool.core.util.ClassLoaderUtil;

View File

@ -1,6 +1,7 @@
package cn.hutool.core.lang; package cn.hutool.core.lang.id;
import cn.hutool.core.date.SystemClock; import cn.hutool.core.date.SystemClock;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.lang.id.IdUtil; import cn.hutool.core.lang.id.IdUtil;
import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.RandomUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;

View File

@ -1,9 +1,11 @@
package cn.hutool.core.lang; package cn.hutool.core.map;
import cn.hutool.core.bean.BeanPath; import cn.hutool.core.bean.BeanPath;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert; import cn.hutool.core.convert.Convert;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.lang.Pair;
import cn.hutool.core.lang.func.Func0; import cn.hutool.core.lang.func.Func0;
import cn.hutool.core.lang.func.LambdaUtil; import cn.hutool.core.lang.func.LambdaUtil;
import cn.hutool.core.getter.BasicTypeGetter; import cn.hutool.core.getter.BasicTypeGetter;

View File

@ -2,7 +2,7 @@ package cn.hutool.core.text.bloomfilter;
import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.FileUtil;
import cn.hutool.core.io.IoUtil; import cn.hutool.core.io.IoUtil;
import cn.hutool.core.util.HashUtil; import cn.hutool.core.lang.hash.HashUtil;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.IOException; import java.io.IOException;

View File

@ -1,6 +1,6 @@
package cn.hutool.core.text.bloomfilter.filter; package cn.hutool.core.text.bloomfilter.filter;
import cn.hutool.core.util.HashUtil; import cn.hutool.core.lang.hash.HashUtil;
/** /**
* 默认Bloom过滤器使用Java自带的Hash算法 * 默认Bloom过滤器使用Java自带的Hash算法

View File

@ -1,6 +1,6 @@
package cn.hutool.core.text.bloomfilter.filter; package cn.hutool.core.text.bloomfilter.filter;
import cn.hutool.core.util.HashUtil; import cn.hutool.core.lang.hash.HashUtil;
public class ELFFilter extends FuncFilter { public class ELFFilter extends FuncFilter {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;

View File

@ -1,6 +1,6 @@
package cn.hutool.core.text.bloomfilter.filter; package cn.hutool.core.text.bloomfilter.filter;
import cn.hutool.core.util.HashUtil; import cn.hutool.core.lang.hash.HashUtil;
public class FNVFilter extends FuncFilter { public class FNVFilter extends FuncFilter {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;

View File

@ -1,7 +1,7 @@
package cn.hutool.core.text.bloomfilter.filter; package cn.hutool.core.text.bloomfilter.filter;
import cn.hutool.core.util.HashUtil; import cn.hutool.core.lang.hash.HashUtil;
public class HfFilter extends FuncFilter { public class HfFilter extends FuncFilter {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;

View File

@ -1,6 +1,6 @@
package cn.hutool.core.text.bloomfilter.filter; package cn.hutool.core.text.bloomfilter.filter;
import cn.hutool.core.util.HashUtil; import cn.hutool.core.lang.hash.HashUtil;
public class HfIpFilter extends FuncFilter { public class HfIpFilter extends FuncFilter {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;

View File

@ -1,6 +1,6 @@
package cn.hutool.core.text.bloomfilter.filter; package cn.hutool.core.text.bloomfilter.filter;
import cn.hutool.core.util.HashUtil; import cn.hutool.core.lang.hash.HashUtil;
public class JSFilter extends FuncFilter { public class JSFilter extends FuncFilter {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;

View File

@ -1,6 +1,6 @@
package cn.hutool.core.text.bloomfilter.filter; package cn.hutool.core.text.bloomfilter.filter;
import cn.hutool.core.util.HashUtil; import cn.hutool.core.lang.hash.HashUtil;
public class PJWFilter extends FuncFilter { public class PJWFilter extends FuncFilter {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;

View File

@ -1,6 +1,6 @@
package cn.hutool.core.text.bloomfilter.filter; package cn.hutool.core.text.bloomfilter.filter;
import cn.hutool.core.util.HashUtil; import cn.hutool.core.lang.hash.HashUtil;
public class RSFilter extends FuncFilter { public class RSFilter extends FuncFilter {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;

View File

@ -1,6 +1,6 @@
package cn.hutool.core.text.bloomfilter.filter; package cn.hutool.core.text.bloomfilter.filter;
import cn.hutool.core.util.HashUtil; import cn.hutool.core.lang.hash.HashUtil;
public class SDBMFilter extends FuncFilter { public class SDBMFilter extends FuncFilter {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;

View File

@ -1,6 +1,6 @@
package cn.hutool.core.text.bloomfilter.filter; package cn.hutool.core.text.bloomfilter.filter;
import cn.hutool.core.util.HashUtil; import cn.hutool.core.lang.hash.HashUtil;
public class TianlFilter extends FuncFilter { public class TianlFilter extends FuncFilter {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;

View File

@ -1,7 +1,6 @@
package cn.hutool.core.text.dfa; package cn.hutool.core.text.dfa;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.Filter;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import java.util.ArrayList; import java.util.ArrayList;
@ -10,6 +9,7 @@ import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import java.util.function.Predicate;
/** /**
* DFADeterministic Finite Automaton 确定有穷自动机 * DFADeterministic Finite Automaton 确定有穷自动机
@ -36,7 +36,7 @@ public class WordTree extends HashMap<Character, WordTree> {
/** /**
* 字符过滤规则通过定义字符串过滤规则过滤不需要的字符当accept为false时此字符不参与匹配 * 字符过滤规则通过定义字符串过滤规则过滤不需要的字符当accept为false时此字符不参与匹配
*/ */
private Filter<Character> charFilter = StopChar::isNotStopChar; private Predicate<Character> charFilter = StopChar::isNotStopChar;
//--------------------------------------------------------------------------------------- Constructor start //--------------------------------------------------------------------------------------- Constructor start
@ -55,7 +55,7 @@ public class WordTree extends HashMap<Character, WordTree> {
* @return this * @return this
* @since 5.2.0 * @since 5.2.0
*/ */
public WordTree setCharFilter(Filter<Character> charFilter) { public WordTree setCharFilter(Predicate<Character> charFilter) {
this.charFilter = charFilter; this.charFilter = charFilter;
return this; return this;
} }
@ -98,7 +98,7 @@ public class WordTree extends HashMap<Character, WordTree> {
* @return this * @return this
*/ */
public WordTree addWord(String word) { public WordTree addWord(String word) {
final Filter<Character> charFilter = this.charFilter; final Predicate<Character> charFilter = this.charFilter;
WordTree parent = null; WordTree parent = null;
WordTree current = this; WordTree current = this;
WordTree child; WordTree child;
@ -106,7 +106,7 @@ public class WordTree extends HashMap<Character, WordTree> {
final int length = word.length(); final int length = word.length();
for (int i = 0; i < length; i++) { for (int i = 0; i < length; i++) {
currentChar = word.charAt(i); currentChar = word.charAt(i);
if (charFilter.accept(currentChar)) {//只处理合法字符 if (charFilter.test(currentChar)) {//只处理合法字符
child = current.get(currentChar); child = current.get(currentChar);
if (child == null) { if (child == null) {
//无子类新建一个子节点后存放下一个字符 //无子类新建一个子节点后存放下一个字符
@ -245,7 +245,7 @@ public class WordTree extends HashMap<Character, WordTree> {
List<FoundWord> foundWords = new ArrayList<>(); List<FoundWord> foundWords = new ArrayList<>();
WordTree current = this; WordTree current = this;
final int length = text.length(); final int length = text.length();
final Filter<Character> charFilter = this.charFilter; final Predicate<Character> charFilter = this.charFilter;
//存放查找到的字符缓存完整出现一个词时加到findedWords中否则清空 //存放查找到的字符缓存完整出现一个词时加到findedWords中否则清空
final StringBuilder wordBuffer = StrUtil.builder(); final StringBuilder wordBuffer = StrUtil.builder();
final StringBuilder keyBuffer = StrUtil.builder(); final StringBuilder keyBuffer = StrUtil.builder();
@ -256,7 +256,7 @@ public class WordTree extends HashMap<Character, WordTree> {
for (int j = i; j < length; j++) { for (int j = i; j < length; j++) {
currentChar = text.charAt(j); currentChar = text.charAt(j);
// Console.log("i: {}, j: {}, currentChar: {}", i, j, currentChar); // Console.log("i: {}, j: {}, currentChar: {}", i, j, currentChar);
if (false == charFilter.accept(currentChar)) { if (false == charFilter.test(currentChar)) {
if (wordBuffer.length() > 0) { if (wordBuffer.length() > 0) {
//做为关键词中间的停顿词被当作关键词的一部分被返回 //做为关键词中间的停顿词被当作关键词的一部分被返回
wordBuffer.append(currentChar); wordBuffer.append(currentChar);

View File

@ -1,8 +1,9 @@
package cn.hutool.core.text.escape; package cn.hutool.core.text.escape;
import cn.hutool.core.lang.Filter;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import java.util.function.Predicate;
/** /**
* 转义和反转义工具类Escape / Unescape<br> * 转义和反转义工具类Escape / Unescape<br>
* escape采用ISO Latin字符集对指定的字符串进行编码<br> * escape采用ISO Latin字符集对指定的字符串进行编码<br>
@ -16,7 +17,7 @@ public class EscapeUtil {
* 不转义的符号编码 * 不转义的符号编码
*/ */
private static final String NOT_ESCAPE_CHARS = "*@-_+./"; private static final String NOT_ESCAPE_CHARS = "*@-_+./";
private static final Filter<Character> JS_ESCAPE_FILTER = c -> false == ( private static final Predicate<Character> JS_ESCAPE_FILTER = c -> false == (
Character.isDigit(c) Character.isDigit(c)
|| Character.isLowerCase(c) || Character.isLowerCase(c)
|| Character.isUpperCase(c) || Character.isUpperCase(c)
@ -109,7 +110,7 @@ public class EscapeUtil {
* @param filter 编码过滤器对于过滤器中accept为false的字符不做编码 * @param filter 编码过滤器对于过滤器中accept为false的字符不做编码
* @return 编码后的字符串 * @return 编码后的字符串
*/ */
public static String escape(CharSequence content, Filter<Character> filter) { public static String escape(CharSequence content, Predicate<Character> filter) {
if (StrUtil.isEmpty(content)) { if (StrUtil.isEmpty(content)) {
return StrUtil.str(content); return StrUtil.str(content);
} }
@ -118,7 +119,7 @@ public class EscapeUtil {
char c; char c;
for (int i = 0; i < content.length(); i++) { for (int i = 0; i < content.length(); i++) {
c = content.charAt(i); c = content.charAt(i);
if (false == filter.accept(c)) { if (false == filter.test(c)) {
tmp.append(c); tmp.append(c);
} else if (c < 256) { } else if (c < 256) {
tmp.append("%"); tmp.append("%");

View File

@ -26,6 +26,7 @@ import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Locale; import java.util.Locale;
import java.util.Set; import java.util.Set;
import java.util.function.Predicate;
/** /**
* 类工具类 <br> * 类工具类 <br>
@ -233,7 +234,7 @@ public class ClassUtil {
* @param classFilter class过滤器过滤掉不需要的class * @param classFilter class过滤器过滤掉不需要的class
* @return 类集合 * @return 类集合
*/ */
public static Set<Class<?>> scanPackage(String packageName, Filter<Class<?>> classFilter) { public static Set<Class<?>> scanPackage(String packageName, Predicate<Class<?>> classFilter) {
return ClassScanner.scanPackage(packageName, classFilter); return ClassScanner.scanPackage(packageName, classFilter);
} }

View File

@ -2,7 +2,7 @@ package cn.hutool.core.collection;
import cn.hutool.core.comparator.ComparableComparator; import cn.hutool.core.comparator.ComparableComparator;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Dict; import cn.hutool.core.map.Dict;
import cn.hutool.core.map.MapUtil; import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;

View File

@ -2,6 +2,7 @@ package cn.hutool.core.lang;
import cn.hutool.core.builder.GenericBuilder; import cn.hutool.core.builder.GenericBuilder;
import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateTime;
import cn.hutool.core.map.Dict;
import org.junit.Assert; import org.junit.Assert;
import org.junit.Test; import org.junit.Test;

View File

@ -2,6 +2,7 @@ package cn.hutool.core.lang;
import java.util.HashSet; import java.util.HashSet;
import cn.hutool.core.lang.id.ObjectId;
import org.junit.Assert; import org.junit.Assert;
import org.junit.Ignore; import org.junit.Ignore;
import org.junit.Test; import org.junit.Test;

View File

@ -1,5 +1,6 @@
package cn.hutool.core.lang; package cn.hutool.core.lang;
import cn.hutool.core.cache.SimpleCache;
import cn.hutool.core.thread.ConcurrencyTester; import cn.hutool.core.thread.ConcurrencyTester;
import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.thread.ThreadUtil;
import org.junit.Assert; import org.junit.Assert;

View File

@ -2,6 +2,7 @@ package cn.hutool.core.lang;
import cn.hutool.core.collection.ConcurrentHashSet; import cn.hutool.core.collection.ConcurrentHashSet;
import cn.hutool.core.exceptions.UtilException; import cn.hutool.core.exceptions.UtilException;
import cn.hutool.core.lang.id.Snowflake;
import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.thread.ThreadUtil;
import cn.hutool.core.lang.id.IdUtil; import cn.hutool.core.lang.id.IdUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;

View File

@ -1,6 +1,6 @@
package cn.hutool.core.text; package cn.hutool.core.text;
import cn.hutool.core.lang.Dict; import cn.hutool.core.map.Dict;
import cn.hutool.core.util.CharUtil; import cn.hutool.core.util.CharUtil;
import org.junit.Assert; import org.junit.Assert;
import org.junit.Test; import org.junit.Test;

View File

@ -1,5 +1,6 @@
package cn.hutool.core.util; package cn.hutool.core.util;
import cn.hutool.core.lang.hash.HashUtil;
import org.junit.Assert; import org.junit.Assert;
import org.junit.Test; import org.junit.Test;

View File

@ -5,7 +5,7 @@ import cn.hutool.core.date.DateUtil;
import cn.hutool.core.date.TimeInterval; import cn.hutool.core.date.TimeInterval;
import cn.hutool.core.exceptions.UtilException; import cn.hutool.core.exceptions.UtilException;
import cn.hutool.core.lang.Console; import cn.hutool.core.lang.Console;
import cn.hutool.core.lang.Snowflake; import cn.hutool.core.lang.id.Snowflake;
import cn.hutool.core.lang.id.IdUtil; import cn.hutool.core.lang.id.IdUtil;
import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.thread.ThreadUtil;
import org.junit.Assert; import org.junit.Assert;

View File

@ -1,6 +1,6 @@
package cn.hutool.core.util; package cn.hutool.core.util;
import cn.hutool.core.lang.Dict; import cn.hutool.core.map.Dict;
import org.junit.Assert; import org.junit.Assert;
import org.junit.Test; import org.junit.Test;

View File

@ -1,7 +1,7 @@
package cn.hutool.db; package cn.hutool.db;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.lang.Dict; import cn.hutool.core.map.Dict;
import cn.hutool.core.lang.func.Func0; import cn.hutool.core.lang.func.Func0;
import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.CharsetUtil; import cn.hutool.core.util.CharsetUtil;

View File

@ -1,6 +1,6 @@
package cn.hutool.extra.ssh; package cn.hutool.extra.ssh;
import cn.hutool.core.lang.SimpleCache; import cn.hutool.core.cache.SimpleCache;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.jcraft.jsch.Session; import com.jcraft.jsch.Session;

View File

@ -1,7 +1,7 @@
package cn.hutool.extra.template.engine.wit; package cn.hutool.extra.template.engine.wit;
import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.FileUtil;
import cn.hutool.core.lang.Dict; import cn.hutool.core.map.Dict;
import cn.hutool.extra.template.Template; import cn.hutool.extra.template.Template;
import cn.hutool.extra.template.TemplateConfig; import cn.hutool.extra.template.TemplateConfig;
import cn.hutool.extra.template.TemplateEngine; import cn.hutool.extra.template.TemplateEngine;

View File

@ -2,7 +2,7 @@ package cn.hutool.extra.expression;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Console; import cn.hutool.core.lang.Console;
import cn.hutool.core.lang.Dict; import cn.hutool.core.map.Dict;
import cn.hutool.extra.expression.engine.aviator.AviatorEngine; import cn.hutool.extra.expression.engine.aviator.AviatorEngine;
import lombok.Data; import lombok.Data;
import org.junit.Assert; import org.junit.Assert;

View File

@ -1,6 +1,6 @@
package cn.hutool.extra.expression; package cn.hutool.extra.expression;
import cn.hutool.core.lang.Dict; import cn.hutool.core.map.Dict;
import cn.hutool.extra.expression.engine.jexl.JexlEngine; import cn.hutool.extra.expression.engine.jexl.JexlEngine;
import cn.hutool.extra.expression.engine.jfireel.JfireELEngine; import cn.hutool.extra.expression.engine.jfireel.JfireELEngine;
import cn.hutool.extra.expression.engine.mvel.MvelEngine; import cn.hutool.extra.expression.engine.mvel.MvelEngine;

View File

@ -1,6 +1,6 @@
package cn.hutool.extra.template; package cn.hutool.extra.template;
import cn.hutool.core.lang.Dict; import cn.hutool.core.map.Dict;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.hutool.extra.template.engine.jetbrick.JetbrickEngine; import cn.hutool.extra.template.engine.jetbrick.JetbrickEngine;
import org.junit.Assert; import org.junit.Assert;

View File

@ -1,6 +1,6 @@
package cn.hutool.extra.template; package cn.hutool.extra.template;
import cn.hutool.core.lang.Dict; import cn.hutool.core.map.Dict;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.hutool.extra.template.TemplateConfig.ResourceMode; import cn.hutool.extra.template.TemplateConfig.ResourceMode;
import cn.hutool.extra.template.engine.beetl.BeetlEngine; import cn.hutool.extra.template.engine.beetl.BeetlEngine;

View File

@ -14,7 +14,7 @@ import org.thymeleaf.context.Context;
import org.thymeleaf.templateresolver.StringTemplateResolver; import org.thymeleaf.templateresolver.StringTemplateResolver;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Dict; import cn.hutool.core.map.Dict;
import cn.hutool.extra.template.engine.thymeleaf.ThymeleafEngine; import cn.hutool.extra.template.engine.thymeleaf.ThymeleafEngine;
/** /**

View File

@ -1,6 +1,6 @@
package cn.hutool.extra.template; package cn.hutool.extra.template;
import cn.hutool.core.lang.Dict; import cn.hutool.core.map.Dict;
import cn.hutool.core.util.CharsetUtil; import cn.hutool.core.util.CharsetUtil;
import cn.hutool.extra.template.engine.velocity.VelocityEngine; import cn.hutool.extra.template.engine.velocity.VelocityEngine;
import org.junit.Assert; import org.junit.Assert;

View File

@ -4,7 +4,7 @@ import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.ListUtil; import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.convert.ConvertException; import cn.hutool.core.convert.ConvertException;
import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.FileUtil;
import cn.hutool.core.lang.Dict; import cn.hutool.core.map.Dict;
import cn.hutool.core.lang.TypeReference; import cn.hutool.core.lang.TypeReference;
import cn.hutool.core.util.CharsetUtil; import cn.hutool.core.util.CharsetUtil;
import cn.hutool.json.test.bean.Exam; import cn.hutool.json.test.bean.Exam;

View File

@ -3,7 +3,7 @@ package cn.hutool.log.dialect.console;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Assert; import cn.hutool.core.lang.Assert;
import cn.hutool.core.lang.Console; import cn.hutool.core.lang.Console;
import cn.hutool.core.lang.Dict; import cn.hutool.core.map.Dict;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.hutool.log.AbstractLog; import cn.hutool.log.AbstractLog;
import cn.hutool.log.level.Level; import cn.hutool.log.level.Level;

View File

@ -3,7 +3,7 @@ package cn.hutool.setting.yaml;
import cn.hutool.core.io.IoUtil; import cn.hutool.core.io.IoUtil;
import cn.hutool.core.io.resource.ResourceUtil; import cn.hutool.core.io.resource.ResourceUtil;
import cn.hutool.core.lang.Assert; import cn.hutool.core.lang.Assert;
import cn.hutool.core.lang.Dict; import cn.hutool.core.map.Dict;
import org.yaml.snakeyaml.DumperOptions; import org.yaml.snakeyaml.DumperOptions;
import org.yaml.snakeyaml.Yaml; import org.yaml.snakeyaml.Yaml;

View File

@ -1,7 +1,7 @@
package cn.hutool.setting.yaml; package cn.hutool.setting.yaml;
import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.FileUtil;
import cn.hutool.core.lang.Dict; import cn.hutool.core.map.Dict;
import cn.hutool.core.util.CharsetUtil; import cn.hutool.core.util.CharsetUtil;
import org.junit.Assert; import org.junit.Assert;
import org.junit.Ignore; import org.junit.Ignore;