[英]how list.sort() works when exclude one specific value?
我有一個清單
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")
添加條件
您不知道sort
算法將比較String
的順序。 它可能會調用compare("Two","Six")
,並且可能會調用compare("Six","Two")
。 因此,您的Comparator
必須支持這兩種情況。
此外,如果不檢查第一個和第二個參數的startsWith("S")
,就違反了Comparator
合同,該合同要求sgn(compare(x, y)) == -sgn(compare(y, x))
。
順便說一句,最好檢查equals("Six")
而不是startsWith("S")
。 否則,如果您的輸入包含“七”,則您的代碼將失敗。
collections.sort使用合並排序,合並排序的思想是通過階段將列表划分為單個元素列表,並在這些階段中按有序順序將它們合並,因此不能保證您的“六個”將是第一個元素或第二個元素在比較中
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.