From 6c39380b6ae1b674b0e071da0b0c24ef252f087b Mon Sep 17 00:00:00 2001 From: Looly Date: Fri, 6 Oct 2023 17:10:59 +0800 Subject: [PATCH] fix PinyinComparator --- .../core/comparator/LocaleComparator.java | 35 +++++++++++++++++++ .../core/comparator/PinyinComparator.java | 24 ++++++------- 2 files changed, 46 insertions(+), 13 deletions(-) create mode 100644 hutool-core/src/main/java/org/dromara/hutool/core/comparator/LocaleComparator.java diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/comparator/LocaleComparator.java b/hutool-core/src/main/java/org/dromara/hutool/core/comparator/LocaleComparator.java new file mode 100644 index 000000000..156660be9 --- /dev/null +++ b/hutool-core/src/main/java/org/dromara/hutool/core/comparator/LocaleComparator.java @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2023. looly(loolly@aliyun.com) + * Hutool is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * https://license.coscl.org.cn/MulanPSL2 + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, + * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, + * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ + +package org.dromara.hutool.core.comparator; + +import java.text.Collator; +import java.util.Locale; + +/** + * 自定义语言环境 String 比较,可为自然语言文本构建搜索和排序例程。 + * + * @author looly + */ +public class LocaleComparator extends NullComparator { + private static final long serialVersionUID = 1L; + + /** + * 构造 + * + * @param nullGreater 是否{@code null}在后 + * @param desiredLocale 语言环境 + */ + public LocaleComparator(final boolean nullGreater, final Locale desiredLocale) { + super(nullGreater, Collator.getInstance(desiredLocale)); + } +} diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/comparator/PinyinComparator.java b/hutool-core/src/main/java/org/dromara/hutool/core/comparator/PinyinComparator.java index f3a5069c5..11f7acc00 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/comparator/PinyinComparator.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/comparator/PinyinComparator.java @@ -12,9 +12,6 @@ package org.dromara.hutool.core.comparator; -import java.io.Serializable; -import java.text.Collator; -import java.util.Comparator; import java.util.Locale; /** @@ -23,21 +20,22 @@ import java.util.Locale; * @author looly * @since 4.0.8 */ -public class PinyinComparator implements Comparator, Serializable { +public class PinyinComparator extends LocaleComparator { private static final long serialVersionUID = 1L; - final Collator collator; + /** + * 构造,{@code null}最大,排在最后 + */ + public PinyinComparator() { + this(true); + } /** * 构造 + * + * @param nullGreater 是否{@code null}最大,排在最后 */ - public PinyinComparator() { - collator = Collator.getInstance(Locale.CHINESE); + public PinyinComparator(final boolean nullGreater) { + super(nullGreater, Locale.CHINESE); } - - @Override - public int compare(final String o1, final String o2) { - return collator.compare(o1, o2); - } - }