匿名函数 Collections.sort java
Anonymous Functions Collections.sort java
任何人都可以提供一个简单的解释,说明这个列表是如何排序的,以及为什么匿名函数中的代码可以使排序列表的第一项始终是顶部的最后一个词典顺序单词。我明白了 if a compareTo returns -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);
}
});
他们进行了特殊处理,以便 Zenda 始终通过检查值并在 zenda 分别是第一个或第二个术语的情况下对 -1 或 1 进行硬编码,从而在其他任何事情之前进行排序,然后他们委托其余部分对常规字符串 compareTo 实现的排序。
Comparator.compare
类似于 Comparable.compareTo
。它们或多或少地执行相同的功能,但不同的是进行比较的对象。 compareTo
允许一个对象将自己与另一个对象进行比较,而 compare
被 "third-party" 对象用来比较另外两个对象。
这里的匿名Comparator
比较两个String
,o1
和o2
。如果 o1
应该在 o2
之前,它 returns -1
。否则,如果 o2
应该出现在 o1
之前,则返回 1
。
您的匿名 Comparator
的特别之处在于它确保 "Zenda"
始终被认为是第一个。
任何人都可以提供一个简单的解释,说明这个列表是如何排序的,以及为什么匿名函数中的代码可以使排序列表的第一项始终是顶部的最后一个词典顺序单词。我明白了 if a compareTo returns -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);
}
});
他们进行了特殊处理,以便 Zenda 始终通过检查值并在 zenda 分别是第一个或第二个术语的情况下对 -1 或 1 进行硬编码,从而在其他任何事情之前进行排序,然后他们委托其余部分对常规字符串 compareTo 实现的排序。
Comparator.compare
类似于 Comparable.compareTo
。它们或多或少地执行相同的功能,但不同的是进行比较的对象。 compareTo
允许一个对象将自己与另一个对象进行比较,而 compare
被 "third-party" 对象用来比较另外两个对象。
这里的匿名Comparator
比较两个String
,o1
和o2
。如果 o1
应该在 o2
之前,它 returns -1
。否则,如果 o2
应该出现在 o1
之前,则返回 1
。
您的匿名 Comparator
的特别之处在于它确保 "Zenda"
始终被认为是第一个。