From 3aac1e9af653599eb5403e6046b4e987124d0f90 Mon Sep 17 00:00:00 2001 From: Looly Date: Sat, 26 Nov 2022 12:23:31 +0800 Subject: [PATCH] fix code --- .../main/java/cn/hutool/core/map/BiMap.java | 47 +++++++++++++++++++ .../cn/hutool/core/thread/SyncFinisher.java | 2 +- .../java/cn/hutool/core/map/BiMapTest.java | 22 +++++++++ 3 files changed, 70 insertions(+), 1 deletion(-) diff --git a/hutool-core/src/main/java/cn/hutool/core/map/BiMap.java b/hutool-core/src/main/java/cn/hutool/core/map/BiMap.java index 1659b0d6e..ff37ca706 100644 --- a/hutool-core/src/main/java/cn/hutool/core/map/BiMap.java +++ b/hutool-core/src/main/java/cn/hutool/core/map/BiMap.java @@ -1,6 +1,8 @@ package cn.hutool.core.map; import java.util.Map; +import java.util.function.BiFunction; +import java.util.function.Function; /** * 双向Map
@@ -83,4 +85,49 @@ public class BiMap extends MapWrapper { public K getKey(final V value) { return getInverse().get(value); } + + @Override + public V putIfAbsent(final K key, final V value) { + if (null != this.inverse) { + this.inverse.putIfAbsent(value, key); + } + return super.putIfAbsent(key, value); + } + + @Override + public V computeIfAbsent(final K key, final Function mappingFunction) { + final V result = super.computeIfAbsent(key, mappingFunction); + resetInverseMap(); + return result; + } + + @Override + public V computeIfPresent(final K key, final BiFunction remappingFunction) { + final V result = super.computeIfPresent(key, remappingFunction); + resetInverseMap(); + return result; + } + + @Override + public V compute(final K key, final BiFunction remappingFunction) { + final V result = super.compute(key, remappingFunction); + resetInverseMap(); + return result; + } + + @Override + public V merge(final K key, final V value, final BiFunction remappingFunction) { + final V result = super.merge(key, value, remappingFunction); + resetInverseMap(); + return result; + } + + /** + * 重置反转的Map,如果反转map为空,则不操作。 + */ + private void resetInverseMap() { + if (null != this.inverse) { + inverse = null; + } + } } diff --git a/hutool-core/src/main/java/cn/hutool/core/thread/SyncFinisher.java b/hutool-core/src/main/java/cn/hutool/core/thread/SyncFinisher.java index ebdee040a..b8cbec6dd 100644 --- a/hutool-core/src/main/java/cn/hutool/core/thread/SyncFinisher.java +++ b/hutool-core/src/main/java/cn/hutool/core/thread/SyncFinisher.java @@ -174,8 +174,8 @@ public class SyncFinisher implements Closeable { } else { this.executorService.shutdown(); } + this.executorService = null; } - this.executorService = null; clearWorker(); } diff --git a/hutool-core/src/test/java/cn/hutool/core/map/BiMapTest.java b/hutool-core/src/test/java/cn/hutool/core/map/BiMapTest.java index 7dc91e5f0..a26816b64 100644 --- a/hutool-core/src/test/java/cn/hutool/core/map/BiMapTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/map/BiMapTest.java @@ -19,4 +19,26 @@ public class BiMapTest { Assert.assertEquals("aaa", biMap.getKey(111)); Assert.assertEquals("bbb", biMap.getKey(222)); } + + @Test + public void computeIfAbsentTest(){ + final BiMap biMap = new BiMap<>(new HashMap<>()); + biMap.put("aaa", 111); + biMap.put("bbb", 222); + + biMap.computeIfAbsent("ccc", s -> 333); + Assert.assertEquals(new Integer(333), biMap.get("ccc")); + Assert.assertEquals("ccc", biMap.getKey(333)); + } + + @Test + public void putIfAbsentTest(){ + final BiMap biMap = new BiMap<>(new HashMap<>()); + biMap.put("aaa", 111); + biMap.put("bbb", 222); + + biMap.putIfAbsent("ccc", 333); + Assert.assertEquals(new Integer(333), biMap.get("ccc")); + Assert.assertEquals("ccc", biMap.getKey(333)); + } }