我想在两个不同的参数上使用 Collections.sort() 两次
I want to use Collections.sort() twice on two different parameters
我有一个对象列表,我想使用不同的属性对其进行排序。
@Override
public int compareTo(Object obj)
{
Field tab = (Field) obj;
int objx = Integer.parseInt(tab.getX());
// int objy = Integer.parseInt(tab.getY());
int classX = Integer.parseInt(this.X);
if (classX == objx)
return 0;
else if (classX > objx)
return 1;
else
return -1;
}
我目前拥有的:
Collections.sort(list1); // But using property1 to sort
Collections.sort(list1); // But using property2 to sort
所以,在第一种情况下,我可以使用 property1 进行排序,但如何使用 property2 进行排序?
我尝试使用不同的参数进行排序,但 compareTo()
只接受一个参数。
您可以为每个 属性 创建两个不同的比较器并将其传递给
Collections.sort(list1, comparator1);
Collections.sort(list1, comparator2);
如果你想使用两个不同的 属性 你需要使用两个不同的比较器。
比较器是实现接口 Comparator
的 class
public class EmpSort {
static final Comparator<Employee> comp1 = new Comparator<Employee>() {
public int compare(Employee e1, Employee e2) {
// use prperty1 to sort
return e2.hireDate().compareTo(e1.hireDate());
}
};
}
public class EmpSort2 {
static final Comparator<Employee> comp2 = new Comparator<Employee>() {
public int compare(Employee e1, Employee e2) {
// use prperty2 to sort
return e2.hireDate().compareTo(e1.hireDate());
}
};
}
Collections.sort(list1, comp1);//but using prperty1 to sort
Collections.sort(list1, comp2);//but using prperty2 to sort
一个相关问题Collections sort(List<T>,Comparator<? super T>) method example
Collections.sort(list1, new Comparator<T>() {
public int compare(T arg0, T arg1) {
//your compare logic for prperty1
}
});
Collections.sort(list1, new Comparator<T>() {
public int compare(T arg0, T arg1) {
//your compare logic for prperty2
}
});
Java8在Comparator接口中提供了一些方便的功能
Collections.sort(list, Comparator.comparingInt(Field::getX));
Collections.sort(list, Comparator.comparingInt(Field::getY));
如果你想嵌套比较器,这里还有不错的函数。
Collections.sort(list, Comparator.comparingInt(Field::getX).thenComparingInt(Field::getY));
我有一个对象列表,我想使用不同的属性对其进行排序。
@Override
public int compareTo(Object obj)
{
Field tab = (Field) obj;
int objx = Integer.parseInt(tab.getX());
// int objy = Integer.parseInt(tab.getY());
int classX = Integer.parseInt(this.X);
if (classX == objx)
return 0;
else if (classX > objx)
return 1;
else
return -1;
}
我目前拥有的:
Collections.sort(list1); // But using property1 to sort
Collections.sort(list1); // But using property2 to sort
所以,在第一种情况下,我可以使用 property1 进行排序,但如何使用 property2 进行排序?
我尝试使用不同的参数进行排序,但 compareTo()
只接受一个参数。
您可以为每个 属性 创建两个不同的比较器并将其传递给
Collections.sort(list1, comparator1);
Collections.sort(list1, comparator2);
如果你想使用两个不同的 属性 你需要使用两个不同的比较器。
比较器是实现接口 Comparator
的 classpublic class EmpSort {
static final Comparator<Employee> comp1 = new Comparator<Employee>() {
public int compare(Employee e1, Employee e2) {
// use prperty1 to sort
return e2.hireDate().compareTo(e1.hireDate());
}
};
}
public class EmpSort2 {
static final Comparator<Employee> comp2 = new Comparator<Employee>() {
public int compare(Employee e1, Employee e2) {
// use prperty2 to sort
return e2.hireDate().compareTo(e1.hireDate());
}
};
}
Collections.sort(list1, comp1);//but using prperty1 to sort
Collections.sort(list1, comp2);//but using prperty2 to sort
一个相关问题Collections sort(List<T>,Comparator<? super T>) method example
Collections.sort(list1, new Comparator<T>() {
public int compare(T arg0, T arg1) {
//your compare logic for prperty1
}
});
Collections.sort(list1, new Comparator<T>() {
public int compare(T arg0, T arg1) {
//your compare logic for prperty2
}
});
Java8在Comparator接口中提供了一些方便的功能
Collections.sort(list, Comparator.comparingInt(Field::getX));
Collections.sort(list, Comparator.comparingInt(Field::getY));
如果你想嵌套比较器,这里还有不错的函数。
Collections.sort(list, Comparator.comparingInt(Field::getX).thenComparingInt(Field::getY));