fix PinyinComparator

This commit is contained in:
Looly 2023-10-06 17:10:59 +08:00
parent ee85bd9596
commit 6c39380b6a
2 changed files with 46 additions and 13 deletions

View File

@ -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<String> {
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));
}
}

View File

@ -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<String>, 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);
}
}