JavaFx ObservableList<String> sorted() 与 sorted(Comparator.<String>naturalOrder())

标签 java sorting javafx

所以我最初尝试使用

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,user20 用作 map 中的键。

for (String user: userMap.keySet()) {
            listOfStrings.add(user);
}  

// listOfStrings = listOfStrings.sorted();  //
listOfStrings = listOfStrings.sorted(Comparator.<String>naturalOrder());

最佳答案

这是 Java 8u40 中的一个错误,随后(大部分)已在以后的版本中修复。 (有关边缘案例或替代实现选择的讨论,请参阅此答案的评论)。

错误跟踪器问题:

associated changeset .


Java 8u40 codeObservableList.java 中是:

public default SortedList<E> sorted() {
    return sorted(null);
}

上述调用的错误调用序列在用户 pbabcdefp 的回答中有详细说明。代码中的错误基本上意味着 sorted() 方法根本不返回排序列表,而是按当前顺序返回列表。

Java 8u-dev (当前中继代码)和 Java 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);
}

关于JavaFx ObservableList<String> sorted() 与 sorted(Comparator.<String>naturalOrder()),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29854327/

相关文章:

java - 如何在 jsonb postgresql 中查询并转换为谓词 JPA

java - 是否可以强制 Map 以一种方式排序,但以另一种方式获取值?

java - 如何在 JavaFX 中访问对象的子对象

java - 如何从 javaFX 中的 webView 获取 SelectedText

java - 如何使用 .equals() 以外的方法比较 java 中的列表

java - 了解 Java 中的递归

java - 在 android 中处理多个 Intent 的更好方法是什么?

c++ - ListView 按错误列排序

java - 这是合并排序吗?

java - javaFX SDK 中 java SDK 的版本