我有一个清单
List<String> names = new ArrayList<String>();
names.add("One");
names.add("Two");
names.add("Three");
names.add("Six");
names.add("Four");
names.add("Five");
我希望这个列表排序为Six,然后它应该按字母顺序排列。
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")
答案 0 :(得分:5)
您不知道sort
算法将按哪种顺序比较您的String
。它可能会调用compare("Two","Six")
,它可能会调用compare("Six","Two")
。因此,Comparator
必须支持这两种情况。
此外,如果不检查startsWith("S")
第一个和第二个参数,则表示您违反了Comparator
合同,该合同要求sgn(compare(x, y)) == -sgn(compare(y, x))
。
equals("Six")
而不是startsWith("S")
。否则,如果您的输入包含&#34; Seven&#34;。,您的代码将会失败
答案 1 :(得分:2)