我有一个 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/