java – 如何构建一个以与PostgreSQL相同的方式对Strings进行排序的比较器?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 如何构建一个以与PostgreSQL相同的方式对Strings进行排序的比较器?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1915字,纯文字阅读大概需要3分钟。
内容图文
![java – 如何构建一个以与PostgreSQL相同的方式对Strings进行排序的比较器?](/upload/InfoBanner/zyjiaocheng/899/c59173135895499b93df9b8ff34f9112.jpg)
我正在编写一个集成测试,它将复杂的顺序传递给PostgreSQL,然后检查数据是否以正确的顺序返回.我正在用Java编写这个集成测试,它的String.compareTo方法看起来与PostgreSQLs的排序方式不同.我在PostgreSQL数据库上运行了这个:
SELECT regexp_split_to_table('D d a A c b', ' ') ORDER BY 1;
它的回应如下:
a
A
b
c
d
D
然后我创建了这个单元测试,将其与Java排序的方式进行比较:
import com.google.common.collect.Lists;
import com.google.common.collect.Ordering;
import org.junit.Test;
import java.util.List;
import static junit.framework.Assert.assertEquals;
public class PostgresqlSortOrderTest {
@Test
public void whenJavaSortsStringsThenItIsTheSameAsWhenPostgresqlSortsStrings() {
List<String> postgresqlOrder = Lists.newArrayList("a", "A", "b", "c", "d", "D");
Ordering<String> ordering = new Ordering<String>() {
@Override
public int compare(String left, String right) {
return left.compareTo(right);
}
};
List<String> javaOrdering = ordering.sortedCopy(postgresqlOrder);
assertEquals(postgresqlOrder, javaOrdering);
}
}
此输出失败:
Expected :[a, A, b, c, d, D] //postgresql
Actual :[A, D, a, b, c, d] //java
我对这里的术语一无所知.我想知道这些不同的String排序的名称,以便我可以更好地沟通.但更重要的是,如何让Java像PostgreSQL一样排序呢?
解决方法:
迟到以显示答案,但我担心一个简单的不区分大小写的搜索不一定会做你想要的.
您在搜索中需要的关键字是collation(在更广泛的意义上是locales),PostgreSQL依赖于底层操作系统来为此提供支持.排序很少是一个简单的逐字符比较.例如,在许多语言环境中,空格被忽略(在en_GB中肯定是这种情况).
此外,这意味着您可以在不同平台上最终获得不同的排序顺序(取决于Apple或Microsoft是否同意Linus关于您所在国家/地区的默认排序).
已经讨论过是否有必要包含一个BSD许可的库来提供跨平台的一致的一系列排序.但是,这需要做很多工作,这意味着您可以从数据库中的其他操作系统中进行不同的排序.虽然不同的提供商不同意如何处理这个问题,但我担心没有一个简单的解决方案.
您可能想要调查“传统”排序的“C”排序规则.我担心我无法评论Java对正确的语言环境排序的处理 – 而不是我的领域.
内容总结
以上是互联网集市为您收集整理的java – 如何构建一个以与PostgreSQL相同的方式对Strings进行排序的比较器?全部内容,希望文章能够帮你解决java – 如何构建一个以与PostgreSQL相同的方式对Strings进行排序的比较器?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。