匿名函数Collections.sort java

时间:2016-06-16 15:47:26

标签: java sorting collections anonymous-function

任何人都会提供一个简单的解释,说明这个列表是如何排序的,以及为什么匿名函数中的代码可以使排序列表的第一项始终是顶部的最后一个词典单词。我得到的是,如果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);
}
});

2 个答案:

答案 0 :(得分:1)

Comparator.compareComparable.compareTo类似。它们或多或少地执行相同的功能,但不同的是进行比较的对象。 compareTo允许对象将自己与另一个对象进行比较,而compare则由&#34;第三方&#34;用于比较两个其他对象的对象。

这里的匿名Comparator正在比较两个Stringo1o2。如果o1应该在o2之前,则返回-1。如果在o2之前o1应该出现,则会返回1

您的匿名Comparator的特殊之处在于它确保始终将"Zenda"视为第一位。

答案 1 :(得分:0)

他们已经进行了特殊处理,以便Zenda总是在其他任何事情之前排序,通过检查值并在zenda分别是第一个或第二个术语的情况下硬编码-1或1,然后他们委托剩余的顺序到常规字符串compareTo实现。