From 7393f66d0641676aa7951e3bdeb0ea2453a602bd Mon Sep 17 00:00:00 2001 From: Looly Date: Wed, 26 Nov 2025 17:35:20 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BE=9B=20core=20=E6=A8=A1=E5=9D=97?= =?UTF-8?q?=E4=B8=8B=E7=9A=84=20text=20=E4=B8=AD=E5=B8=83=E9=9A=86?= =?UTF-8?q?=E8=BF=87=E6=BB=A4=E5=99=A8=E7=9A=84=E5=8D=95=E8=BF=87=E6=BB=A4?= =?UTF-8?q?=E5=99=A8=E5=A4=9A=E5=93=88=E5=B8=8C=E5=87=BD=E6=95=B0=E6=94=AF?= =?UTF-8?q?=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hutool/v7/core/text/bloom/FuncFilter.java | 27 ++++++++++--------- .../text/bloom/BitMapBloomFilterTest.java | 8 +++--- 2 files changed, 18 insertions(+), 17 deletions(-) diff --git a/hutool-core/src/main/java/cn/hutool/v7/core/text/bloom/FuncFilter.java b/hutool-core/src/main/java/cn/hutool/v7/core/text/bloom/FuncFilter.java index f764468387..5eb936cb18 100644 --- a/hutool-core/src/main/java/cn/hutool/v7/core/text/bloom/FuncFilter.java +++ b/hutool-core/src/main/java/cn/hutool/v7/core/text/bloom/FuncFilter.java @@ -22,7 +22,7 @@ import java.io.Serial; import java.util.Arrays; import java.util.Collections; import java.util.List; -import java.util.function.Function; +import java.util.function.ToIntFunction; /** * 基于Hash函数方法的{@link BloomFilter} @@ -37,31 +37,31 @@ public class FuncFilter extends AbstractFilter { /** * 创建FuncFilter * - * @param size 最大值 + * @param size 最大值 * @param hashFuncs Hash函数 * @return FuncFilter */ @SafeVarargs - public static FuncFilter of(final int size, final Function... hashFuncs) { + public static FuncFilter of(final int size, final ToIntFunction... hashFuncs) { return new FuncFilter(size, hashFuncs); } // 允许接收多个哈希函数 - private final List> hashFuncs; + private final List> hashFuncs; /** - * @param size 最大值 + * @param size 最大值 * @param hashFuncs Hash函数 */ @SafeVarargs - public FuncFilter(final int size, final Function... hashFuncs) { + public FuncFilter(final int size, final ToIntFunction... hashFuncs) { super(size); Assert.notEmpty(hashFuncs, "Hash functions must not be empty"); this.hashFuncs = Collections.unmodifiableList(Arrays.asList(hashFuncs)); } /** - *兼容父类,如果存在多个哈希函数,就使用第一个 + * 兼容父类,如果存在多个哈希函数,就使用第一个 * * @param str 字符串 */ @@ -72,18 +72,18 @@ public class FuncFilter extends AbstractFilter { /** * - * @param str 字符串 + * @param str 字符串 * @param hashFunc 哈希函数 * @return HashCode 指定哈希函数的计算结果 */ - public int hash(final String str, final Function hashFunc) { + public int hash(final String str, final ToIntFunction hashFunc) { // 通过位运算获取正数 - return (hashFunc.apply(str).intValue() & 0x7FFFFFFF) % size; + return (hashFunc.applyAsInt(str) & 0x7FFFFFFF) % size; } @Override public boolean contains(final String str) { - for (final Function hashFunc : hashFuncs) { + for (final ToIntFunction hashFunc : hashFuncs) { if (!bitSet.get(hash(str, hashFunc))) { return false; } @@ -94,8 +94,9 @@ public class FuncFilter extends AbstractFilter { @Override public boolean add(final String str) { boolean add = false; - for (final Function hashFunc : hashFuncs) { - int hash = hash(str, hashFunc); + int hash; + for (final ToIntFunction hashFunc : hashFuncs) { + hash = hash(str, hashFunc); if (!bitSet.get(hash)) { bitSet.set(hash); add = true; diff --git a/hutool-core/src/test/java/cn/hutool/v7/core/text/bloom/BitMapBloomFilterTest.java b/hutool-core/src/test/java/cn/hutool/v7/core/text/bloom/BitMapBloomFilterTest.java index a6851654f3..8988e0719f 100644 --- a/hutool-core/src/test/java/cn/hutool/v7/core/text/bloom/BitMapBloomFilterTest.java +++ b/hutool-core/src/test/java/cn/hutool/v7/core/text/bloom/BitMapBloomFilterTest.java @@ -65,7 +65,7 @@ public class BitMapBloomFilterTest { @Test public void combinedMultiHashTest() { - FuncFilter multiHashFuncFilter = FuncFilter.of(SIZE, + final FuncFilter multiHashFuncFilter = FuncFilter.of(SIZE, HashUtil::bkdrHash, HashUtil::apHash, HashUtil::djbHash @@ -84,9 +84,9 @@ public class BitMapBloomFilterTest { HashUtil::djbHash ); - String s1 = "你好世界"; - String s2 = "双亲委派"; - String s3 = "测试工程师"; + final String s1 = "你好世界"; + final String s2 = "双亲委派"; + final String s3 = "测试工程师"; filter.add(s1); filter.add(s2);