Java 集合未按预期顺序排序,例如,ąąą在zzz之后

Java 集合未按预期顺序排序,例如,ąąą在zzz之后,java,sorting,jsf,primefaces,tree,Java,Sorting,Jsf,Primefaces,Tree,不久前,有人问了一个非常类似的问题: 我所拥有的是: 正如我们所见,排序错误 Bean文件: 提前感谢。这不是JSF特有的问题。JSF只是这里的模型视图演示者。当您以不同的方式(例如System.out.println)向视图呈现已经准备好的模型时,您会遇到完全相同的问题 让我示范一下: List<String> strings = Arrays.asList("zzz", "ąąą", "žžž", "ššš", "aaa", "sss"); Collections.sort(s

不久前,有人问了一个非常类似的问题:

我所拥有的是:

正如我们所见,排序错误

Bean文件:


提前感谢。

这不是JSF特有的问题。JSF只是这里的模型视图演示者。当您以不同的方式(例如System.out.println)向视图呈现已经准备好的模型时,您会遇到完全相同的问题

让我示范一下:

List<String> strings = Arrays.asList("zzz", "ąąą", "žžž", "ššš", "aaa", "sss");
Collections.sort(strings);
System.out.println(strings);
[aaa,ąąą,sss,šš,zzz,žžž]


您需要更改TreeNodeParator以考虑这一点。当您在JSF上下文中时,考虑从UIVIEWROTGETROLALE中提取区域设置。 这不是JSF特有的问题。JSF只是这里的模型视图演示者。当您以不同的方式(例如System.out.println)向视图呈现已经准备好的模型时,您会遇到完全相同的问题

让我示范一下:

List<String> strings = Arrays.asList("zzz", "ąąą", "žžž", "ššš", "aaa", "sss");
Collections.sort(strings);
System.out.println(strings);
[aaa,ąąą,sss,šš,zzz,žžž]


您需要更改TreeNodeParator以考虑这一点。当您在JSF上下文中时,考虑从UIVIEWROTGETROLALE中提取区域设置。 那么你的意思是说你的比较器实际上从未被调用过?是的,正确,我不能检查这个比较器是否对我有效,因为,如果你检查代码,root是新的DefaultTreeNode,比较器想要一个列表,我对比较器来说仍然是新的,而且我需要第一次/第二次使用。。我的意思是,我不知道如何将我的folderTree传递给comparator。你应该改为对孩子进行排序。我明天会尝试这样做,等我开始工作后,我会发回这里,谢谢你帮助Balus!所以我照你说的做了,我给孩子们打了个电话,但像ą,š,ž这样的字母都跟在普通字母后面,像a,s,z。。。更新了我的代码所以你的意思是说你的比较器实际上从未被调用?是的,正确,我不能检查这个比较器是否对我有效,因为,如果你检查代码,根是新的DefaultTreeNode,比较器想要一个列表,我对比较器来说仍然是新的,我需要第一次/第二次使用。。我的意思是,我不知道如何将我的folderTree传递给comparator。你应该改为对孩子进行排序。我明天会尝试这样做,等我开始工作后,我会发回这里,谢谢你帮助Balus!所以我照你说的做了,我给孩子们打了个电话,但像ą,š,ž这样的字母都跟在普通字母后面,像a,s,z。。。更新了我的代码
List<String> aa = Arrays.asList("ž", "a", "aa", "c", "ąąą", "ęęę", "ąą", "vv", "žžž", "zz", "ėėė");
[a, aa, ąą, ąąą, c, ėėė, ęęę, vv, zz, ž, žžž]
List<String> strings = Arrays.asList("zzz", "ąąą", "žžž", "ššš", "aaa", "sss");
Collections.sort(strings);
System.out.println(strings);
List<String> strings = Arrays.asList("zzz", "ąąą", "žžž", "ššš", "aaa", "sss");
Collections.sort(strings, Collator.getInstance(new Locale("pl")));
System.out.println(strings);