所以我最初尝试使用
listOfStrings = listOfStrings.sorted();
Ordering user11, user10, user20, user04 etc...
其中有JavaDoc声明它将创建具有自然顺序的列表
用户抱怨订购,所以我想我必须写一个比较器,但是很幸运,IntelliJ自动填写了
listOfStrings = listOfStrings.sorted(Comparator.<String>naturalOrder());
Ordering user01, user02, user03, user04 etc...
我的第一个想法是,它将返回相同的内容,但是它按照我想要的方式对字符串进行排序。Comparator.naturalOrder的文档也为自然订单。
那我在文档中错过了什么呢?
通过阅读文档,我相信他们应该订购相同的清单。有谁知道为什么不呢?
正在从文本文件user01,user02,user03.user04,user05,user06,user07,user08,user09,user10,user11,user12,user13,user14,user15,user16,user17,user18,user19,user19,user20读取字符串键中有地图。
for (String user: userMap.keySet()) {
listOfStrings.add(user);
}
// listOfStrings = listOfStrings.sorted(); //
listOfStrings = listOfStrings.sorted(Comparator.<String>naturalOrder());
这是Java 8u40中的一个错误,此错误随后(大部分)已得到修复,以供以后的发行版使用。(请参阅此答案的注释,以获取关于极端情况或替代实现选择的讨论)。
错误跟踪器问题:
以及相关的变更集。
在的Java 8u40代码的ObservableList.java
方法是:
public default SortedList<E> sorted() {
return sorted(null);
}
用户pbabcdefp的应答中详细说明了上述呼叫的错误呼叫顺序。代码中的错误基本上意味着该sorted()
方法根本不返回排序列表,而是按其当前顺序返回列表。
该爪哇8U-dev的(当前躯干代码)和爪哇9U-dev的代码是:
/**
* Creates a {@link SortedList} wrapper of this list with the natural
* ordering.
* @return new {@code SortedList}
* @since JavaFX 8.0
*/
public default SortedList<E> sorted() {
Comparator naturalOrder = new Comparator<E>() {
@Override
public int compare(E o1, E o2) {
if (o1 == null && o2 == null) {
return 0;
}
if (o1 == null) {
return -1;
}
if (o2 == null) {
return 1;
}
if (o1 instanceof Comparable) {
return ((Comparable) o1).compareTo(o2);
}
return Collator.getInstance().compare(o1.toString(), o2.toString());
}
};
return sorted(naturalOrder);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句