mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-08-18 20:38:02 +08:00
fix code
This commit is contained in:
@@ -1,20 +1,21 @@
|
||||
package cn.hutool.core.io.file;
|
||||
|
||||
import cn.hutool.core.io.FileUtil;
|
||||
import cn.hutool.core.lang.func.Wrapper;
|
||||
import cn.hutool.core.util.CharsetUtil;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.Serializable;
|
||||
import java.nio.charset.Charset;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
|
||||
import cn.hutool.core.io.FileUtil;
|
||||
import cn.hutool.core.util.CharsetUtil;
|
||||
|
||||
/**
|
||||
* 文件包装器,扩展文件对象
|
||||
*
|
||||
* @author Looly
|
||||
*
|
||||
*/
|
||||
public class FileWrapper implements Serializable{
|
||||
public class FileWrapper implements Wrapper<File>, Serializable{
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
protected File file;
|
||||
@@ -40,7 +41,8 @@ public class FileWrapper implements Serializable{
|
||||
* 获得文件
|
||||
* @return 文件
|
||||
*/
|
||||
public File getFile() {
|
||||
@Override
|
||||
public File getRaw() {
|
||||
return file;
|
||||
}
|
||||
|
||||
|
||||
17
hutool-core/src/main/java/cn/hutool/core/lang/func/Wrapper.java
Executable file
17
hutool-core/src/main/java/cn/hutool/core/lang/func/Wrapper.java
Executable file
@@ -0,0 +1,17 @@
|
||||
package cn.hutool.core.lang.func;
|
||||
|
||||
/**
|
||||
* 包装接口
|
||||
*
|
||||
* @param <T> 原始对象类型
|
||||
* @author looly
|
||||
* @since 6.0.0
|
||||
*/
|
||||
public interface Wrapper<T> {
|
||||
/**
|
||||
* 获取原始对象
|
||||
*
|
||||
* @return 原始对象
|
||||
*/
|
||||
T getRaw();
|
||||
}
|
||||
@@ -3,6 +3,7 @@ package cn.hutool.core.map;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.collection.ListUtil;
|
||||
import cn.hutool.core.lang.Assert;
|
||||
import cn.hutool.core.lang.func.Wrapper;
|
||||
import cn.hutool.core.reflect.ClassUtil;
|
||||
import cn.hutool.core.text.StrUtil;
|
||||
import cn.hutool.core.util.ObjUtil;
|
||||
@@ -33,6 +34,7 @@ import java.util.stream.Collectors;
|
||||
* 也可以在获取到{@link TreeEntry}后,使用节点本身的方法对数进行操作或访问。
|
||||
*
|
||||
* @param <K> key类型
|
||||
* @param <V> 值类型
|
||||
* @author huangchengxing
|
||||
*/
|
||||
public class LinkedForestMap<K, V> implements ForestMap<K, V> {
|
||||
@@ -48,11 +50,11 @@ public class LinkedForestMap<K, V> implements ForestMap<K, V> {
|
||||
private final boolean allowOverrideParent;
|
||||
|
||||
/**
|
||||
* 构建{@link LinkedForestMap}
|
||||
* 构建{@code LinkedForestMap}
|
||||
*
|
||||
* @param allowOverrideParent 当指定节点已经与其他节点构成了父子关系,是否允许将该节点的父节点强制替换为指定节点
|
||||
*/
|
||||
public LinkedForestMap(boolean allowOverrideParent) {
|
||||
public LinkedForestMap(final boolean allowOverrideParent) {
|
||||
this.allowOverrideParent = allowOverrideParent;
|
||||
this.nodes = new LinkedHashMap<>();
|
||||
}
|
||||
@@ -86,7 +88,7 @@ public class LinkedForestMap<K, V> implements ForestMap<K, V> {
|
||||
* @return 是否
|
||||
*/
|
||||
@Override
|
||||
public boolean containsKey(Object key) {
|
||||
public boolean containsKey(final Object key) {
|
||||
return nodes.containsKey(key);
|
||||
}
|
||||
|
||||
@@ -97,7 +99,7 @@ public class LinkedForestMap<K, V> implements ForestMap<K, V> {
|
||||
* @return 是否
|
||||
*/
|
||||
@Override
|
||||
public boolean containsValue(Object value) {
|
||||
public boolean containsValue(final Object value) {
|
||||
return nodes.containsValue(value);
|
||||
}
|
||||
|
||||
@@ -108,7 +110,7 @@ public class LinkedForestMap<K, V> implements ForestMap<K, V> {
|
||||
* @return 节点
|
||||
*/
|
||||
@Override
|
||||
public TreeEntry<K, V> get(Object key) {
|
||||
public TreeEntry<K, V> get(final Object key) {
|
||||
return nodes.get(key);
|
||||
}
|
||||
|
||||
@@ -126,7 +128,7 @@ public class LinkedForestMap<K, V> implements ForestMap<K, V> {
|
||||
* @return 删除的且引用关系已经改变的节点,若key没有对应节点,则返回null
|
||||
*/
|
||||
@Override
|
||||
public TreeEntry<K, V> remove(Object key) {
|
||||
public TreeEntry<K, V> remove(final Object key) {
|
||||
final TreeEntryNode<K, V> target = nodes.remove(key);
|
||||
if (ObjUtil.isNull(target)) {
|
||||
return null;
|
||||
@@ -189,7 +191,7 @@ public class LinkedForestMap<K, V> implements ForestMap<K, V> {
|
||||
/**
|
||||
* 将{@link TreeEntryNode}包装为{@link EntryNodeWrapper}
|
||||
*/
|
||||
private Map.Entry<K, TreeEntry<K, V>> wrap(Map.Entry<K, TreeEntryNode<K, V>> nodeEntry) {
|
||||
private Map.Entry<K, TreeEntry<K, V>> wrap(final Map.Entry<K, TreeEntryNode<K, V>> nodeEntry) {
|
||||
return new EntryNodeWrapper<>(nodeEntry.getValue());
|
||||
}
|
||||
|
||||
@@ -207,7 +209,7 @@ public class LinkedForestMap<K, V> implements ForestMap<K, V> {
|
||||
* @return 节点,若key已有对应节点,则返回具有旧值的节点,否则返回null
|
||||
*/
|
||||
@Override
|
||||
public TreeEntryNode<K, V> putNode(K key, V value) {
|
||||
public TreeEntryNode<K, V> putNode(final K key, final V value) {
|
||||
TreeEntryNode<K, V> target = nodes.get(key);
|
||||
if (ObjUtil.isNotNull(target)) {
|
||||
final V oldVal = target.getValue();
|
||||
@@ -238,7 +240,7 @@ public class LinkedForestMap<K, V> implements ForestMap<K, V> {
|
||||
* @param childValue 子节点的值
|
||||
*/
|
||||
@Override
|
||||
public void putLinkedNodes(K parentKey, V parentValue, K childKey, V childValue) {
|
||||
public void putLinkedNodes(final K parentKey, final V parentValue, final K childKey, final V childValue) {
|
||||
linkNodes(parentKey, childKey, (parent, child) -> {
|
||||
parent.setValue(parentValue);
|
||||
child.setValue(childValue);
|
||||
@@ -257,7 +259,7 @@ public class LinkedForestMap<K, V> implements ForestMap<K, V> {
|
||||
* @param childValue 子节点的值
|
||||
*/
|
||||
@Override
|
||||
public void putLinkedNodes(K parentKey, K childKey, V childValue) {
|
||||
public void putLinkedNodes(final K parentKey, final K childKey, final V childValue) {
|
||||
linkNodes(parentKey, childKey, (parent, child) -> child.setValue(childValue));
|
||||
}
|
||||
|
||||
@@ -269,7 +271,7 @@ public class LinkedForestMap<K, V> implements ForestMap<K, V> {
|
||||
* @param consumer 对父节点和子节点的操作,允许为null
|
||||
*/
|
||||
@Override
|
||||
public void linkNodes(K parentKey, K childKey, BiConsumer<TreeEntry<K, V>, TreeEntry<K, V>> consumer) {
|
||||
public void linkNodes(final K parentKey, final K childKey, BiConsumer<TreeEntry<K, V>, TreeEntry<K, V>> consumer) {
|
||||
consumer = ObjUtil.defaultIfNull(consumer, (parent, child) -> {
|
||||
});
|
||||
final TreeEntryNode<K, V> parentNode = nodes.computeIfAbsent(parentKey, t -> new TreeEntryNode<>(null, t));
|
||||
@@ -315,7 +317,7 @@ public class LinkedForestMap<K, V> implements ForestMap<K, V> {
|
||||
* @param childKey 子节点
|
||||
*/
|
||||
@Override
|
||||
public void unlinkNode(K parentKey, K childKey) {
|
||||
public void unlinkNode(final K parentKey, final K childKey) {
|
||||
final TreeEntryNode<K, V> childNode = nodes.get(childKey);
|
||||
if (ObjUtil.isNull(childNode)) {
|
||||
return;
|
||||
@@ -369,7 +371,7 @@ public class LinkedForestMap<K, V> implements ForestMap<K, V> {
|
||||
* @param parent 节点的父节点
|
||||
* @param key 节点的key
|
||||
*/
|
||||
public TreeEntryNode(TreeEntryNode<K, V> parent, K key) {
|
||||
public TreeEntryNode(final TreeEntryNode<K, V> parent, final K key) {
|
||||
this(parent, key, null);
|
||||
}
|
||||
|
||||
@@ -380,7 +382,7 @@ public class LinkedForestMap<K, V> implements ForestMap<K, V> {
|
||||
* @param key 节点的key
|
||||
* @param value 节点的value
|
||||
*/
|
||||
public TreeEntryNode(TreeEntryNode<K, V> parent, K key, V value) {
|
||||
public TreeEntryNode(final TreeEntryNode<K, V> parent, final K key, final V value) {
|
||||
this.parent = parent;
|
||||
this.key = key;
|
||||
this.value = value;
|
||||
@@ -432,7 +434,7 @@ public class LinkedForestMap<K, V> implements ForestMap<K, V> {
|
||||
* @return 节点的旧value
|
||||
*/
|
||||
@Override
|
||||
public V setValue(V value) {
|
||||
public V setValue(final V value) {
|
||||
final V oldVal = getValue();
|
||||
this.value = value;
|
||||
return oldVal;
|
||||
@@ -449,7 +451,7 @@ public class LinkedForestMap<K, V> implements ForestMap<K, V> {
|
||||
* @return 遍历到的最后一个节点
|
||||
*/
|
||||
TreeEntryNode<K, V> traverseParentNodes(
|
||||
boolean includeCurrent, Consumer<TreeEntryNode<K, V>> consumer, Predicate<TreeEntryNode<K, V>> breakTraverse) {
|
||||
final boolean includeCurrent, final Consumer<TreeEntryNode<K, V>> consumer, Predicate<TreeEntryNode<K, V>> breakTraverse) {
|
||||
breakTraverse = ObjUtil.defaultIfNull(breakTraverse, n -> false);
|
||||
TreeEntryNode<K, V> curr = includeCurrent ? this : this.parent;
|
||||
while (ObjUtil.isNotNull(curr)) {
|
||||
@@ -504,7 +506,7 @@ public class LinkedForestMap<K, V> implements ForestMap<K, V> {
|
||||
* @return 指定父节点,当不存在时返回null
|
||||
*/
|
||||
@Override
|
||||
public TreeEntryNode<K, V> getParent(K key) {
|
||||
public TreeEntryNode<K, V> getParent(final K key) {
|
||||
return traverseParentNodes(false, p -> {
|
||||
}, p -> p.equalsKey(key));
|
||||
}
|
||||
@@ -516,7 +518,7 @@ public class LinkedForestMap<K, V> implements ForestMap<K, V> {
|
||||
* @param nodeConsumer 对节点的处理
|
||||
*/
|
||||
@Override
|
||||
public void forEachChild(boolean includeSelf, Consumer<TreeEntry<K, V>> nodeConsumer) {
|
||||
public void forEachChild(final boolean includeSelf, final Consumer<TreeEntry<K, V>> nodeConsumer) {
|
||||
traverseChildNodes(includeSelf, (index, child) -> nodeConsumer.accept(child), null);
|
||||
}
|
||||
|
||||
@@ -526,7 +528,7 @@ public class LinkedForestMap<K, V> implements ForestMap<K, V> {
|
||||
* @param key 要比较的key
|
||||
* @return 是否key一致
|
||||
*/
|
||||
public boolean equalsKey(K key) {
|
||||
public boolean equalsKey(final K key) {
|
||||
return ObjUtil.equals(getKey(), key);
|
||||
}
|
||||
|
||||
@@ -541,7 +543,7 @@ public class LinkedForestMap<K, V> implements ForestMap<K, V> {
|
||||
* @return 遍历到的最后一个节点
|
||||
*/
|
||||
TreeEntryNode<K, V> traverseChildNodes(
|
||||
boolean includeCurrent, BiConsumer<Integer, TreeEntryNode<K, V>> consumer, BiPredicate<Integer, TreeEntryNode<K, V>> breakTraverse) {
|
||||
final boolean includeCurrent, final BiConsumer<Integer, TreeEntryNode<K, V>> consumer, BiPredicate<Integer, TreeEntryNode<K, V>> breakTraverse) {
|
||||
breakTraverse = ObjUtil.defaultIfNull(breakTraverse, (i, n) -> false);
|
||||
final Deque<List<TreeEntryNode<K, V>>> keyNodeDeque = ListUtil.ofLinked(ListUtil.of(this));
|
||||
boolean needProcess = includeCurrent;
|
||||
@@ -577,7 +579,7 @@ public class LinkedForestMap<K, V> implements ForestMap<K, V> {
|
||||
* @param child 子节点
|
||||
* @throws IllegalArgumentException 当要添加的子节点已经是其自身父节点时抛出
|
||||
*/
|
||||
void addChild(TreeEntryNode<K, V> child) {
|
||||
void addChild(final TreeEntryNode<K, V> child) {
|
||||
if (containsChild(child.key)) {
|
||||
return;
|
||||
}
|
||||
@@ -605,7 +607,7 @@ public class LinkedForestMap<K, V> implements ForestMap<K, V> {
|
||||
*
|
||||
* @param key 子节点
|
||||
*/
|
||||
void removeDeclaredChild(K key) {
|
||||
void removeDeclaredChild(final K key) {
|
||||
final TreeEntryNode<K, V> child = children.get(key);
|
||||
if (ObjUtil.isNull(child)) {
|
||||
return;
|
||||
@@ -629,7 +631,7 @@ public class LinkedForestMap<K, V> implements ForestMap<K, V> {
|
||||
* @return 节点
|
||||
*/
|
||||
@Override
|
||||
public TreeEntryNode<K, V> getChild(K key) {
|
||||
public TreeEntryNode<K, V> getChild(final K key) {
|
||||
return traverseChildNodes(false, (i, c) -> {
|
||||
}, (i, c) -> c.equalsKey(key));
|
||||
}
|
||||
@@ -673,7 +675,7 @@ public class LinkedForestMap<K, V> implements ForestMap<K, V> {
|
||||
* @return 是否
|
||||
*/
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
public boolean equals(final Object o) {
|
||||
if (this == o) {
|
||||
return true;
|
||||
}
|
||||
@@ -701,8 +703,8 @@ public class LinkedForestMap<K, V> implements ForestMap<K, V> {
|
||||
* @param value 复制的节点的值
|
||||
* @return 节点
|
||||
*/
|
||||
TreeEntryNode<K, V> copy(V value) {
|
||||
TreeEntryNode<K, V> copiedNode = new TreeEntryNode<>(this.parent, this.key, ObjUtil.defaultIfNull(value, this.value));
|
||||
TreeEntryNode<K, V> copy(final V value) {
|
||||
final TreeEntryNode<K, V> copiedNode = new TreeEntryNode<>(this.parent, this.key, ObjUtil.defaultIfNull(value, this.value));
|
||||
copiedNode.children.putAll(children);
|
||||
return copiedNode;
|
||||
}
|
||||
@@ -718,10 +720,10 @@ public class LinkedForestMap<K, V> implements ForestMap<K, V> {
|
||||
* @see #entrySet()
|
||||
* @see #values()
|
||||
*/
|
||||
public static class EntryNodeWrapper<K, V, N extends TreeEntry<K, V>> implements Map.Entry<K, TreeEntry<K, V>> {
|
||||
public static class EntryNodeWrapper<K, V, N extends TreeEntry<K, V>> implements Map.Entry<K, TreeEntry<K, V>>, Wrapper<N> {
|
||||
private final N entryNode;
|
||||
|
||||
EntryNodeWrapper(N entryNode) {
|
||||
EntryNodeWrapper(final N entryNode) {
|
||||
this.entryNode = entryNode;
|
||||
}
|
||||
|
||||
@@ -736,9 +738,14 @@ public class LinkedForestMap<K, V> implements ForestMap<K, V> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public TreeEntry<K, V> setValue(TreeEntry<K, V> value) {
|
||||
public TreeEntry<K, V> setValue(final TreeEntry<K, V> value) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public N getRaw() {
|
||||
return entryNode;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package cn.hutool.core.map;
|
||||
|
||||
import cn.hutool.core.lang.Assert;
|
||||
import cn.hutool.core.lang.func.Wrapper;
|
||||
import cn.hutool.core.util.ObjUtil;
|
||||
|
||||
import java.io.IOException;
|
||||
@@ -21,7 +22,7 @@ import java.util.function.Supplier;
|
||||
* @author looly
|
||||
* @since 4.3.3
|
||||
*/
|
||||
public class MapWrapper<K, V> implements Map<K, V>, Iterable<Map.Entry<K, V>>, Serializable, Cloneable {
|
||||
public class MapWrapper<K, V> implements Map<K, V>, Iterable<Map.Entry<K, V>>, Wrapper<Map<K, V>>, Serializable, Cloneable {
|
||||
private static final long serialVersionUID = -7524578042008586382L;
|
||||
|
||||
/**
|
||||
@@ -64,6 +65,7 @@ public class MapWrapper<K, V> implements Map<K, V>, Iterable<Map.Entry<K, V>>, S
|
||||
*
|
||||
* @return Map
|
||||
*/
|
||||
@Override
|
||||
public Map<K, V> getRaw() {
|
||||
return this.raw;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user