我想做嵌套排序。我有一个课程对象,它有一组应用程序。应用程序具有时间和优先级等属性。现在我想根据优先顺序排列它们,并且优先考虑我想按时间对它们进行排序。在java中排序对象
回答
例如,假定这个类(公共领域仅仅为了节省):
public class Job {
public int prio;
public int timeElapsed;
}
你可能实现使用java.util.Collections类中的静态排序(列表,比较)方法按时间排序。在这里,创建一个匿名的内部类来实现“Job”比较器。这有时被称为函数指针的替代(因为Java没有这些)。
public void sortByTime() {
AbstractList<Job> list = new ArrayList<Job>();
//add some items
Collections.sort(list, new Comparator<Job>() {
public int compare(Job j1, Job j2) {
return j1.timeElapsed - j2.timeElapsed;
}
});
}
心灵的compare()方法的合同模式:http://java.sun.com/javase/6/docs/api/java/util/Comparator.html#compare(T,%20T)
您已经在其他地方提问。编写一个java.util.Comparator的实现。
查看Google Collections Ordering课程http://google-collections.googlecode.com/svn/trunk/javadoc/index.html?com/google/common/collect/Ordering.html。它应该有你需要的一切以及更多。特别是你应该看看复合方法来获得第二次订购。
排序多个标准,使用可比接口一对夫妇共同approches的:
- 写你的compareTo()方法,以便它比较一个字段,然后继续比较另一个,如果它不能返回基于第一个的顺序;
- 如果您再小心一点,那么在您的compareTo()方法中,您可以将这两个条件的组合转换为单个整数,然后您可以将其进行比较。
这些方法中的第一种通常更可取,并且更可能是正确的(即使代码最终看起来有点麻烦)。
请参阅我的网站making Java objects sortable上的示例,其中显示了在诉讼中按照套装和排序扑克牌的示例。
减去上述example中的两个数字并不总是一个好主意。
请考虑如果您将-2,147,483,644与2,147,483,645进行比较,会发生什么情况。减去它们会导致一个整数overflow,因此是一个正数。正数意味着会导致比较者声称-2,147,483,644大于2,147,483,645。
-5 - 6 = -7
-2,147,483,644 - 2,147,483,645 = 1
减去找到比较值是更加危险的,当你考虑比较多头或双打,因为这必须被转换回整数提供溢出另一个机会。例如,从不这样做:
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);
}
}
这里是我的这个7岁的疑问,仍然得到有时报道的意见:
- 使静态方法,你的对象一样(只有当你使用其他库自动生成getter和setter) :
public static String getNameFrom(Order order){ return order.name; }
然后尝试使用是这样的:
Collections.sort(orders, Comparator.comparing(Order::getNameFrom));
- 为了更elegand方法,我总是喜欢不改变实体,但与lambda表达式使用更先进的编码。例如:
Collections.sort(orders, (order1, order2) -> order1.name.compareTo(order2.name);
- 1. 在Java中排序对象的ArrayList
- 2. 在java中排序对象的arraylist
- 3. Java:排序对象队列
- 4. 在对象中排序对象,javascript
- 5. 在Java中对LinkedHashMap排序
- 6. Java程序为字符排序对象
- 7. 如何在Java中对JSON对象进行排序?
- 8. 如何在Java中对对象数组进行排序
- 9. 在C++中对对象数组排序
- 10. 排序对象
- 11. 排序对象
- 12. 排序对象
- 13. 排序对象
- 14. 对象排序与对象
- 15. JS - 排序对象中的子对象
- 16. Java排序对象的阵列列表
- 17. 排序Java对象,并根据属性
- 18. 排序Java脚本对象文本
- 19. Java:属性上的对象排序Arraylist
- 20. 使用多个键排序Java对象
- 21. 排序在JSON对象
- 22. Java的Android排序列表中的java对象
- 23. 如何排序在java中的组件对象的arrayList
- 24. 在java中弹出并重新排序堆对象的元素
- 25. 对Java中的对象数组进行气泡排序
- 26. 使用ArrayList对Java中最高最低的对象排序?
- 27. 如何用java中的对象对链表进行排序
- 28. 对包含对象的java中的链表进行排序
- 29. 对Java中的对象数组进行排序
- 30. Java:使用条件对ArrayList中的对象进行排序