java - 排除一个特定值时 list.sort() 如何工作?

标签 java list sorting collections comparator

我有一个 list

List<String> names = new ArrayList<String>();
names.add("One");
names.add("Two");
names.add("Three");
names.add("Six");
names.add("Four");
names.add("Five");

我希望这个列表排序为 6 在前,然后它应该按字母顺序排列。

names.sort((x, y) -> {
            if (x.startsWith("S"))
                return -1;
            if (y.startsWith("S"))
                return 1; 
            return x.compareTo(y);
        });

这很好用。为什么它不适用于 x.startswith("S") 条件。为什么我需要为 y.startsWith("S")

添加条件

最佳答案

您不知道sort 算法将以何种顺序比较您的String。它可能会调用 compare("Two","Six"),也可能会调用 compare("Six","Two")。因此,您的 Comparator 必须支持这两种情况。

此外,如果不检查第一个和第二个参数的 startsWith("S"),您就违反了 Comparator 协定,它要求 sgn(比较(x,y))== -sgn(比较(y,x))

顺便说一句,最好检查 equals("Six") 而不是 startsWith("S")。否则,如果您的输入包含“七”,您的代码将失败。

关于java - 排除一个特定值时 list.sort() 如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44106511/

相关文章:

java - UDP Android 应用程序适用于 HTC,但不适用于 Nexus S

java - 使基本的 Java 文件服务器成为多线程的

java - 使用反射的 javax.servlet.http.Cookie 的 NoSuchMethodException

swift - 自定义 TableViewController 生成空白单元格

python - 使用条件从列表填充字典

python - 使用循环创建列表,用 float() 填充它

Java:带有对象和空值的 Arrays.sort(...)

c# - 使用 Linq lambdas,如何获得双键排序列表中的第一项?

c++ - 对并行数组中的两组数据进行排序

java - 更改 JOptionPane 的背景