任何人都会提供一个简单的解释,说明这个列表是如何排序的,以及为什么匿名函数中的代码可以使排序列表的第一项始终是顶部的最后一个词典单词。我得到的是,如果compareTo通过比较返回-1 0和1,但代码似乎暗示可以同时比较参数o1和o2 ......
List<String> allNames = new ArrayList<>();
allNames("Alfred");
allNames("Mary");
allNames("Hilda");
allNames("Zenda");
allNames("Thomas");
allNames("Isabel");
Collections.sort(allNames, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
if (o1.equals("Zenda") && !o2.equals("Zenda")){
return -1;
} else if (o2.equals("Zenda") && !o1.equals("Zenda")){
return 1 ;
}
return o1.compareTo(o2);
}
});
答案 0 :(得分:1)
Comparator.compare
与Comparable.compareTo
类似。它们或多或少地执行相同的功能,但不同的是进行比较的对象。 compareTo
允许对象将自己与另一个对象进行比较,而compare
则由&#34;第三方&#34;用于比较两个其他对象的对象。
这里的匿名Comparator
正在比较两个String
,o1
和o2
。如果o1
应该在o2
之前,则返回-1
。如果在o2
之前o1
应该出现,则会返回1
。
您的匿名Comparator
的特殊之处在于它确保始终将"Zenda"
视为第一位。
答案 1 :(得分:0)
他们已经进行了特殊处理,以便Zenda总是在其他任何事情之前排序,通过检查值并在zenda分别是第一个或第二个术语的情况下硬编码-1或1,然后他们委托剩余的顺序到常规字符串compareTo实现。