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);