java中的对象排序
我想做嵌套排序。我有一个课程对象,它有一组应用程序。应用程序有时间和优先级等属性。现在我想先根据优先级对它们进行排序,在优先级范围内,我想按时间对它们进行排序。您已经在其他地方问过这个问题。编写java.util.Comparator的一个实现。查看位于的Google Collections Ordering类。它应该有你需要的一切,再加上更多。特别是,您应该查看复合方法以获得第二次排序。例如,给定此类(仅为简洁起见,公共字段): 您可以在java.util.Collections类中使用静态排序(List,Comparator)方法实现按时间排序。这里,创建一个匿名内部类来实现“Job”的比较器。这有时被称为函数指针的替代方法(因为Java没有函数指针)java中的对象排序,java,Java,我想做嵌套排序。我有一个课程对象,它有一组应用程序。应用程序有时间和优先级等属性。现在我想先根据优先级对它们进行排序,在优先级范围内,我想按时间对它们进行排序。您已经在其他地方问过这个问题。编写java.util.Comparator的一个实现。查看位于的Google Collections Ordering类。它应该有你需要的一切,再加上更多。特别是,您应该查看复合方法以获得第二次排序。例如,给定此类(仅为简洁起见,公共字段): 您可以在java.util.Collections类中使用静态排
public void sortByTime(){
AbstractList=新的ArrayList();
//添加一些项目
Collections.sort(list,newcomparator(){
公共整数比较(作业j1、作业j2){
返回j1.TimeAppeased-j2.TimeAppeased;
}
});
}
请注意compare()方法的契约模型:要根据多个标准进行排序,请使用Compariable接口使用两种常用方法:
- 编写compareTo()方法,使其比较一个字段,如果无法返回基于第一个字段的排序,则继续比较另一个字段李>
- 如果再仔细一次,在compareTo()方法中,可以将两个条件的组合转换为一个整数,然后进行比较
请参阅我的网站上的示例,其中显示了按套装和套装中的数字对扑克牌进行排序的示例。将上述两个数字相减并不总是一个好主意 考虑一下如果将-2147483644与2147483645进行比较会发生什么。减去它们将得到一个整数,从而得到一个正数。正数表示将导致比较器声明-2147483644大于2147483645
-5 - 6 = -7
-2,147,483,644 - 2,147,483,645 = 1
当你考虑比较长或双倍时,减去找到比较值甚至更危险,因为这必须被重新投给int,从而提供另一个溢出的机会。例如,永远不要这样做:
class ZardozComparorator implements Comparator<Zardoz>{
public int compare(Zardoz z1, Zardoz z2) {
Long z1long = Long.getLong(z1.getName());
Long z2long = Long.getLong(z2.getName());
return (int)(z1long-z2long);
}
}
类ZardozComparator实现比较器{
公共整数比较(Zardoz z1,Zardoz z2){
Long z1long=Long.getLong(z1.getName());
Long z2long=Long.getLong(z2.getName());
返回(int)(z1long-z2long);
}
}
而是使用正在比较的对象的比较方法。这样可以避免溢出,如果需要,可以重写compare方法
class ZardozComparorator implements Comparator<Zardoz>{
public int compare(Zardoz z1, Zardoz z2) {
Long z1long = Long.getLong(z1.getName());
Long z2long = Long.getLong(z2.getName());
return z1long.compareTo(z2long);
}
}
类ZardozComparator实现比较器{
公共整数比较(Zardoz z1,Zardoz z2){
Long z1long=Long.getLong(z1.getName());
Long z2long=Long.getLong(z2.getName());
返回z1long.compareTo(z2long);
}
}
以下是我对这个7年前的问题的看法,这个问题有时仍会被报道:
class ZardozComparorator implements Comparator<Zardoz>{
public int compare(Zardoz z1, Zardoz z2) {
Long z1long = Long.getLong(z1.getName());
Long z2long = Long.getLong(z2.getName());
return (int)(z1long-z2long);
}
}
class ZardozComparorator implements Comparator<Zardoz>{
public int compare(Zardoz z1, Zardoz z2) {
Long z1long = Long.getLong(z1.getName());
Long z2long = Long.getLong(z2.getName());
return z1long.compareTo(z2long);
}
}
public static String getNameFrom(Order order){
return order.name;
}
Collections.sort(orders, Comparator.comparing(Order::getNameFrom));
Collections.sort(orders, (order1, order2) ->
order1.name.compareTo(order2.name);