我想根据对象的一个属性对对象的数组列表进行排序,这可以在我的代码中找到&name;' name' ,我搜索并发现使用' Comparator'对于此选项,以下类是我的对象:
public class PhoneBook{
long number;
String name;
String family;
String address;
public long getNumber() {
return number;
}
public void setNumber(long number) {
this.number = number;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getFamily() {
return family;
}
public void setFamily(String family) {
this.family = family;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
我覆盖了'比较'我的排序方法中的方法,如下所示:
public void sort()
{
Collections.sort(phoneBooks, new Comparator<PhoneBook>() {
@Override
public int compare(PhoneBook o1, PhoneBook o2) {
return o1.getName().compareToIgnoreCase(o2.getName());
}
});
}
但我的问题是,我很困惑,为什么不实施&#39; Comparable&#39;在第一个代码中这样:
public class PhoneBook implements Comparable<PhoneBook>
排序方法运行良好,实际上我尝试了上面的代码并且它给了我错误,所以我删除了实现部分,但我看到它有效。
答案 0 :(得分:2)
有两种Collection
方法。
首先只收到一个compareTo
进行排序并使用Comparable
方法。在这种情况下,您的课程需要实施Collection
。
你曾经使用过的另一个接收两个参数,第一个是Comparator
第二个是Comparable<? super YourClass>
。如果您的班级使用Comparator
提供Collections.sort(phoneBooks, (o1, o2)-> o1.getName().compareToIgnoreCase(o2.getName()));
,那么这一点并不在乎。
Lambda在实现功能接口时派上用场:
function cmp($a, $b){
return (floatval($a) == floatval($b)?0:((floatval($a) < floatval($b)) ? -1 : 1));
}
$a = array("1M", "15M", "1.5M", "3M", "38M","3.5M");
usort($a, "cmp");
print_r($a);
// foreach ($a as $key => $value) {
// echo "$key: $value\n";
// }
Output : Array ( [0] => 1M [1] => 1.5M [2] => 3M [3] => 3.5M [4] => 15M [5] => 38M )
答案 1 :(得分:2)
您可以通过两种方式在此处执行所需操作 - 一种是使用自定义Comperator
(如上所述),第二种是通过实现Comperable
界面。
你不需要同时做这两件事。
第一种方式(比较器) - 使用比较器运行sort方法,sort方法将使用它来比较对象。由于它使用比较器,因此不需要您实现compareTo
和Comparable
第二种方式(可竞争) - 在没有任何编译器的情况下运行sort方法。这里发生的是sort方法将使用您在对象中实现的compareTo
接口的Comperable
方法比较您的对象
无论哪种方式都有效,但你不需要两者
答案 2 :(得分:2)
可比较:
比较者:
比较器提供多个排序顺序。换句话说,我们 可以基于多个元素对集合进行排序 身份证,姓名和价格等。
比较器不影响原始类,即实际类 未修改。
Comparator提供了compare()方法来排序元素。
我们可以按比例对比较器类型的列表元素进行排序 Collections.sort(List,Comparator)方法。