mirror of
https://gitee.com/dromara/hutool.git
synced 2025-04-05 17:37:59 +08:00
匿名类替换为lambda表达式
This commit is contained in:
parent
d77b8d43bf
commit
decd6a1460
@ -1,12 +1,12 @@
|
||||
package cn.hutool.cache.impl;
|
||||
|
||||
import cn.hutool.cache.GlobalPruneTimer;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ScheduledFuture;
|
||||
|
||||
import cn.hutool.cache.GlobalPruneTimer;
|
||||
|
||||
/**
|
||||
* 定时缓存<br>
|
||||
* 此缓存没有容量限制,对象只有在过期后才会被移除
|
||||
@ -72,12 +72,7 @@ public class TimedCache<K, V> extends AbstractCache<K, V> {
|
||||
* @param delay 间隔时长,单位毫秒
|
||||
*/
|
||||
public void schedulePrune(long delay) {
|
||||
this.pruneJobFuture = GlobalPruneTimer.INSTANCE.schedule(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
prune();
|
||||
}
|
||||
}, delay);
|
||||
this.pruneJobFuture = GlobalPruneTimer.INSTANCE.schedule(this::prune, delay);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1,19 +1,14 @@
|
||||
package cn.hutool.core.collection;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Enumeration;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import cn.hutool.core.lang.Filter;
|
||||
import cn.hutool.core.map.MapUtil;
|
||||
import cn.hutool.core.util.ArrayUtil;
|
||||
import cn.hutool.core.util.ReflectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
/**
|
||||
* {@link Iterable} 和 {@link Iterator} 相关工具类
|
||||
*
|
||||
@ -511,12 +506,7 @@ public class IterUtil {
|
||||
* @return {@link Iterable}
|
||||
*/
|
||||
public static <E> Iterable<E> asIterable(final Iterator<E> iter) {
|
||||
return new Iterable<E>() {
|
||||
@Override
|
||||
public Iterator<E> iterator() {
|
||||
return iter;
|
||||
}
|
||||
};
|
||||
return () -> iter;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1,9 +1,9 @@
|
||||
package cn.hutool.core.date;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
import cn.hutool.core.lang.Range;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 日期范围
|
||||
*
|
||||
@ -47,16 +47,12 @@ public class DateRange extends Range<DateTime> {
|
||||
* @param isIncludeEnd 是否包含结束的时间
|
||||
*/
|
||||
public DateRange(Date start, Date end, final DateField unit, final int step, boolean isIncludeStart, boolean isIncludeEnd) {
|
||||
super(DateUtil.date(start), DateUtil.date(end), new Steper<DateTime>() {
|
||||
|
||||
@Override
|
||||
public DateTime step(DateTime current, DateTime end, int index) {
|
||||
DateTime dt = current.offsetNew(unit, step);
|
||||
if (dt.isAfter(end)) {
|
||||
return null;
|
||||
}
|
||||
return current.offsetNew(unit, step);
|
||||
super(DateUtil.date(start), DateUtil.date(end), (current, end1, index) -> {
|
||||
DateTime dt = current.offsetNew(unit, step);
|
||||
if (dt.isAfter(end1)) {
|
||||
return null;
|
||||
}
|
||||
return current.offsetNew(unit, step);
|
||||
}, isIncludeStart, isIncludeEnd);
|
||||
}
|
||||
|
||||
|
@ -3,7 +3,6 @@ package cn.hutool.core.date;
|
||||
import java.sql.Timestamp;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
import java.util.concurrent.ThreadFactory;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
/**
|
||||
@ -37,20 +36,12 @@ public class SystemClock {
|
||||
* 开启计时器线程
|
||||
*/
|
||||
private void scheduleClockUpdating() {
|
||||
ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor(new ThreadFactory(){
|
||||
@Override
|
||||
public Thread newThread(Runnable runnable) {
|
||||
Thread thread = new Thread(runnable, "System Clock");
|
||||
thread.setDaemon(true);
|
||||
return thread;
|
||||
}
|
||||
ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor(runnable -> {
|
||||
Thread thread = new Thread(runnable, "System Clock");
|
||||
thread.setDaemon(true);
|
||||
return thread;
|
||||
});
|
||||
scheduler.scheduleAtFixedRate(new Runnable(){
|
||||
@Override
|
||||
public void run() {
|
||||
now = System.currentTimeMillis();
|
||||
}
|
||||
}, period, period, TimeUnit.MILLISECONDS);
|
||||
scheduler.scheduleAtFixedRate(() -> now = System.currentTimeMillis(), period, period, TimeUnit.MILLISECONDS);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1,16 +1,16 @@
|
||||
package cn.hutool.core.io.watch.watchers;
|
||||
|
||||
import cn.hutool.core.collection.ConcurrentHashSet;
|
||||
import cn.hutool.core.io.watch.Watcher;
|
||||
import cn.hutool.core.lang.Assert;
|
||||
import cn.hutool.core.thread.ThreadUtil;
|
||||
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import java.nio.file.WatchEvent;
|
||||
import java.nio.file.WatchService;
|
||||
import java.util.Set;
|
||||
|
||||
import cn.hutool.core.collection.ConcurrentHashSet;
|
||||
import cn.hutool.core.io.watch.Watcher;
|
||||
import cn.hutool.core.lang.Assert;
|
||||
import cn.hutool.core.thread.ThreadUtil;
|
||||
|
||||
/**
|
||||
* 延迟观察者<br>
|
||||
* 使用此观察者通过定义一定的延迟时间,解决{@link WatchService}多个modify的问题<br>
|
||||
@ -95,13 +95,10 @@ public class DelayWatcher implements Watcher {
|
||||
* @param currentPath 事件发生的当前Path路径
|
||||
*/
|
||||
private void startHandleModifyThread(final WatchEvent<?> event, final Path currentPath) {
|
||||
ThreadUtil.execute(new Runnable(){
|
||||
@Override
|
||||
public void run() {
|
||||
ThreadUtil.sleep(delay);
|
||||
eventSet.remove(Paths.get(currentPath.toString(), event.context().toString()));
|
||||
watcher.onModify(event, currentPath);
|
||||
}
|
||||
ThreadUtil.execute(() -> {
|
||||
ThreadUtil.sleep(delay);
|
||||
eventSet.remove(Paths.get(currentPath.toString(), event.context().toString()));
|
||||
watcher.onModify(event, currentPath);
|
||||
});
|
||||
}
|
||||
//---------------------------------------------------------------------------------------------------------- Private method end
|
||||
|
@ -1,12 +1,12 @@
|
||||
package cn.hutool.core.lang;
|
||||
|
||||
import cn.hutool.core.util.HashUtil;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Collection;
|
||||
import java.util.SortedMap;
|
||||
import java.util.TreeMap;
|
||||
|
||||
import cn.hutool.core.util.HashUtil;
|
||||
|
||||
/**
|
||||
* 一致性Hash算法
|
||||
* 算法详解:http://blog.csdn.net/sparkliang/article/details/5279393
|
||||
@ -32,13 +32,9 @@ public class ConsistentHash<T> implements Serializable{
|
||||
*/
|
||||
public ConsistentHash(int numberOfReplicas, Collection<T> nodes) {
|
||||
this.numberOfReplicas = numberOfReplicas;
|
||||
this.hashFunc = new HashFunc() {
|
||||
|
||||
@Override
|
||||
public Integer hash(Object key) {
|
||||
//默认使用FNV1hash算法
|
||||
return HashUtil.fnvHash(key.toString());
|
||||
}
|
||||
this.hashFunc = key -> {
|
||||
//默认使用FNV1hash算法
|
||||
return HashUtil.fnvHash(key.toString());
|
||||
};
|
||||
//初始化节点
|
||||
for (T node : nodes) {
|
||||
|
@ -1,19 +1,18 @@
|
||||
package cn.hutool.core.lang;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileFilter;
|
||||
import java.io.IOException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.net.URL;
|
||||
import java.net.URLClassLoader;
|
||||
import java.util.List;
|
||||
|
||||
import cn.hutool.core.exceptions.UtilException;
|
||||
import cn.hutool.core.io.FileUtil;
|
||||
import cn.hutool.core.util.ClassUtil;
|
||||
import cn.hutool.core.util.ReflectUtil;
|
||||
import cn.hutool.core.util.URLUtil;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.net.URL;
|
||||
import java.net.URLClassLoader;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 外部Jar的类加载器
|
||||
*
|
||||
@ -143,12 +142,7 @@ public class JarClassLoader extends URLClassLoader {
|
||||
* @return jar文件列表
|
||||
*/
|
||||
private static List<File> loopJar(File file) {
|
||||
return FileUtil.loopFiles(file, new FileFilter() {
|
||||
@Override
|
||||
public boolean accept(File file) {
|
||||
return isJarFile(file);
|
||||
}
|
||||
});
|
||||
return FileUtil.loopFiles(file, JarClassLoader::isJarFile);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1,9 +1,5 @@
|
||||
package cn.hutool.core.lang;
|
||||
|
||||
import java.net.MalformedURLException;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.exceptions.ValidateException;
|
||||
import cn.hutool.core.util.NumberUtil;
|
||||
@ -11,6 +7,10 @@ import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.ReUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
|
||||
import java.net.MalformedURLException;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
/**
|
||||
* 字段验证器
|
||||
*
|
||||
@ -465,12 +465,7 @@ public class Validator {
|
||||
* @since 3.3.0
|
||||
*/
|
||||
public static boolean isLetter(CharSequence value) {
|
||||
return StrUtil.isAllCharMatch(value, new cn.hutool.core.lang.Matcher<Character>() {
|
||||
@Override
|
||||
public boolean match(Character t) {
|
||||
return Character.isLetter(t);
|
||||
}
|
||||
});
|
||||
return StrUtil.isAllCharMatch(value, Character::isLetter);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -498,12 +493,7 @@ public class Validator {
|
||||
* @since 3.3.0
|
||||
*/
|
||||
public static boolean isUpperCase(CharSequence value) {
|
||||
return StrUtil.isAllCharMatch(value, new cn.hutool.core.lang.Matcher<Character>() {
|
||||
@Override
|
||||
public boolean match(Character t) {
|
||||
return Character.isUpperCase(t);
|
||||
}
|
||||
});
|
||||
return StrUtil.isAllCharMatch(value, Character::isUpperCase);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -531,12 +521,7 @@ public class Validator {
|
||||
* @since 3.3.0
|
||||
*/
|
||||
public static boolean isLowerCase(CharSequence value) {
|
||||
return StrUtil.isAllCharMatch(value, new cn.hutool.core.lang.Matcher<Character>() {
|
||||
@Override
|
||||
public boolean match(Character t) {
|
||||
return Character.isLowerCase(t);
|
||||
}
|
||||
});
|
||||
return StrUtil.isAllCharMatch(value, Character::isLowerCase);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1,13 +1,13 @@
|
||||
package cn.hutool.core.thread;
|
||||
|
||||
import cn.hutool.core.builder.Builder;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
|
||||
import java.lang.Thread.UncaughtExceptionHandler;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.ThreadFactory;
|
||||
import java.util.concurrent.atomic.AtomicLong;
|
||||
|
||||
import cn.hutool.core.builder.Builder;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
|
||||
/**
|
||||
* ThreadFactory创建器<br>
|
||||
* 参考:Guava的ThreadFactoryBuilder
|
||||
@ -125,24 +125,21 @@ public class ThreadFactoryBuilder implements Builder<ThreadFactory>{
|
||||
final Integer priority = builder.priority;
|
||||
final UncaughtExceptionHandler handler = builder.uncaughtExceptionHandler;
|
||||
final AtomicLong count = (null == namePrefix) ? null : new AtomicLong();
|
||||
return new ThreadFactory() {
|
||||
@Override
|
||||
public Thread newThread(Runnable r) {
|
||||
final Thread thread = backingThreadFactory.newThread(r);
|
||||
if (null != namePrefix) {
|
||||
thread.setName(namePrefix + count.getAndIncrement());
|
||||
}
|
||||
if (null != daemon) {
|
||||
thread.setDaemon(daemon);
|
||||
}
|
||||
if (null != priority) {
|
||||
thread.setPriority(priority);
|
||||
}
|
||||
if (null != handler) {
|
||||
thread.setUncaughtExceptionHandler(handler);
|
||||
}
|
||||
return thread;
|
||||
return r -> {
|
||||
final Thread thread = backingThreadFactory.newThread(r);
|
||||
if (null != namePrefix) {
|
||||
thread.setName(namePrefix + count.getAndIncrement());
|
||||
}
|
||||
if (null != daemon) {
|
||||
thread.setDaemon(daemon);
|
||||
}
|
||||
if (null != priority) {
|
||||
thread.setPriority(priority);
|
||||
}
|
||||
if (null != handler) {
|
||||
thread.setUncaughtExceptionHandler(handler);
|
||||
}
|
||||
return thread;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
@ -1,15 +1,5 @@
|
||||
package cn.hutool.core.util;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Comparator;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.TreeSet;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.hutool.core.convert.Convert;
|
||||
import cn.hutool.core.exceptions.UtilException;
|
||||
@ -18,6 +8,10 @@ import cn.hutool.core.lang.PatternPool;
|
||||
import cn.hutool.core.lang.Validator;
|
||||
import cn.hutool.core.lang.func.Func1;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
/**
|
||||
* 正则相关工具类<br>
|
||||
* 常用正则请见 {@link Validator}
|
||||
@ -174,12 +168,7 @@ public class ReUtil {
|
||||
}
|
||||
|
||||
//提取模板中的编号
|
||||
final TreeSet<Integer> varNums = new TreeSet<>(new Comparator<Integer>() {
|
||||
@Override
|
||||
public int compare(Integer o1, Integer o2) {
|
||||
return ObjectUtil.compare(o2, o1);
|
||||
}
|
||||
});
|
||||
final TreeSet<Integer> varNums = new TreeSet<>((o1, o2) -> ObjectUtil.compare(o2, o1));
|
||||
final Matcher matcherForTemplate = PatternPool.GROUP_VAR.matcher(template);
|
||||
while (matcherForTemplate.find()) {
|
||||
varNums.add(Integer.parseInt(matcherForTemplate.group(1)));
|
||||
|
@ -1,13 +1,12 @@
|
||||
package cn.hutool.dfa;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.Callable;
|
||||
|
||||
import cn.hutool.core.thread.ThreadUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 敏感词工具类
|
||||
* @author Looly
|
||||
@ -33,13 +32,9 @@ public final class SensitiveUtil {
|
||||
*/
|
||||
public static void init(final Collection<String> sensitiveWords, boolean isAsync){
|
||||
if(isAsync){
|
||||
ThreadUtil.execAsync(new Callable<Boolean>(){
|
||||
@Override
|
||||
public Boolean call() throws Exception {
|
||||
init(sensitiveWords);
|
||||
return true;
|
||||
}
|
||||
|
||||
ThreadUtil.execAsync(() -> {
|
||||
init(sensitiveWords);
|
||||
return true;
|
||||
});
|
||||
}else{
|
||||
init(sensitiveWords);
|
||||
|
Loading…
Reference in New Issue
Block a user