2

请查看我尝试实现 Collat​​or 以使用“标题”字段对对象进行排序的方法。方法:

public List<SchoolSubject> findAllByOrderByTitle() {
    List<SchoolSubject> schoolSubjects = subjectRepository.findAllByOrderByTitle();

    Collator uaCollator = Collator.getInstance(new Locale("ua", "UA"));
    uaCollator.setStrength(Collator.SECONDARY);
    schoolSubjects.stream().sorted((s1, s2)->uaCollator.compare(s1.getTitle(), s2.getTitle()));
    return schoolSubjects;
}

它排序,但不正确。字母“i”放在开头。它出什么问题了?

4

2 回答 2

3

我认为你应该使用new Locale("uk", "UA")

检查这个网站关于国际化

编辑:

我认为问题在于乌克兰字母表的表示方式。

https://en.wikipedia.org/wiki/Ukrainian_alphabet#Unicode

根据 Wikipedia,“i”是考虑 Unicode 的最新字母。所以也许你按降序而不是升序排序?

于 2018-10-15T19:28:13.027 回答
2

正确代码:

public List<SchoolSubject> findAllByOrderByTitle() {
    List<SchoolSubject> schoolSubjects = subjectRepository.findAllByOrderByTitle();

    Collator uaCollator = Collator.getInstance(new Locale("uk", "UA"));
    uaCollator.setStrength(Collator.PRIMARY);
    schoolSubjects.sort((s1, s2)->uaCollator.compare(s1.getTitle(), s2.getTitle()));
    return schoolSubjects;
}

使用 new Locale("uk", "UA") 修复,从 lambda 中排除 stream() 并正确排序。

于 2018-10-15T21:01:31.587 回答