以自定义方式安排记录
arranging the records in customised way
排序程序
首先按交货日期排序 & 如果同一日期有多个记录,则按交货时间排序(注意:如果一条记录同时有订购和交货日期,则应仅按交货日期排序)
08-JUN: 03.00,
6 月 8 日:04.00
然后查看没有交货日期的订购日期,它也存在于 08-JUN & 如果同一日期的多个记录按订购时间排序,则按订购日期排序
08-6 月:02.00
然后返回到下一个交货日期&如果有多个记录按交货时间排序
09-JUN: 01.00,
6 月 9 日:12.00
然后查看没有交货日期的订购日期,它也存在于 09-JUN & 如果同一日期的多个记录按订购时间排序,则按订购日期排序
09-6 月:14.00
**ordered date** **orderTime** **DeliveredDate** **DeliveredTime**
24-NOV-2021 10.00 24-NOV-2021 12.00
- - 24-NOV-2021 09.00
25-NOV-2021 9.00 - -
25-NOV-2021 11.00 26-NOV-2021 12.00
25-NOV-2021 10.00 - -
26-NOV-2021 02.00 - -
- - 10-DEC-2021 03.00
- - 10-DEC-2021 02.00
26-NOV-2021 04.00 - -
27-NOV-2021 07.00
30-NOV-2021 08.00 - -
28-NOV-2021 12.00
27-NOV-2021 14.00 - -
//输出应如下所示。->
订购日期 订购时间 交货日期 交货时间
- - 24-NOV-2021 09.00
24-NOV-2021 10.00 24-NOV-2021 12.00
25-NOV-2021 9.00 - -
25-NOV-2021 11.00 26-NOV-2021 12.00
26-NOV-2021 02.00
26-NOV-2021 04.00 - -
27-NOV-2021 07.00 - -
27-NOV-2021 14.00 - -
28-NOV-2021 12.00 - -
30-NOV-2021 08.00 - -
- - 10-DEC-2021 03.00
- - 10-DEC-2021 02.00
//The code I tried.not giving exp OP. any other way ?.->
int compareVal;
if(o1.getDeliveredDate() != null && o2.getDeliveredDate()!=null){
compareValue = (o1.getDeliveredDate().compareTo(o2.getDeliveredDate()));
if (compareValue == 0 && o1.getDeliveredTime() != null && o2.getDeliveredTime() != null) {
return (o1.getDeliveredTime().compareTo(o2.getDeliveredTime()));
}
return comparevalue;
} else if(o1.getDeliveredDate() != null & && o2.getDeliveredDate()==null) {
compareValue = (o1.getDeliveredDate().compareTo(o2.getOrderedDate()));
if (compareValue == 0 ) {
return -1;
}
return comparevalue;
} else if(o1.getDeliveredDate() == null & && o2.getDeliveredDate()!=null) {
compareValue = (o2.getDeliveredDate().compareTo(o1.getOrderedDate()));
if (compareValue == 0 ) {
return 1;
}
return comparevalue;
} else if(o1.getDeliveredDate() == null && o2.getDeliveredDate()==null &&
o1.getOrderedDate() != null && o2.getOrderedDate()!=null) {
compareValue = (o1.getOrderedDate().compareTo(o2.getOrderedDate()));
if (compareValue == 0 && o1.getOrderedTime() != null && o2.getOrderedTime() != null) {
return (o1.getOrderedTime().compareTo(o2.getOrderedTime()));
}
}
return compareVal;
在你的输出中,最后两个必须颠倒过来。这是更正后的比较顺序。它假设有日期时就会有时间。
if (o1.getOrderedDate() != null && o2.getOrderedDate() != null) {
compareValue = (o1.getOrderedDate().compareTo(o2.getOrderedDate()));
if (compareValue == 0) {
return o1.getOrderedTime().compareTo(o2.getOrderedTime());
}
return compareValue;
} else if (o1.getDeliveredDate() != null && o2.getDeliveredDate() != null) {
compareValue = (o1.getDeliveredDate().compareTo(o2.getDeliveredDate()));
if (compareValue == 0) {
return o1.getDeliveredTime().compareTo(o2.getDeliveredTime());
}
return compareValue;
} else if (o1.getDeliveredDate() == null && o2.getOrderedDate() == null) {
compareValue = (o1.getOrderedDate().compareTo(o2.getDeliveredDate()));
if (compareValue == 0) {
return o1.getOrderedTime().compareTo(o2.getDeliveredTime());
}
return compareValue;
} else {
compareValue = (o1.getDeliveredDate().compareTo(o2.getOrderedDate()));
if (compareValue == 0) {
return o1.getDeliveredTime().compareTo(o2.getOrderedTime());
}
return compareValue;
}
注意:要比较两个时间值,您不应依赖字符串的自然排序。例如:它认为 11
< 9
。如果您总是为 0 到 9 小时添加 0
前缀,那么您就很好。
另一种更简单的方法
本质上,您想比较两个对象中的两个 Date/time(让我称它为 MyDateTime
作为 class 名称)即给定两个 MyDateTime
实例,您想选择 订单 的 日期 和 时间 - 如果不存在,请选择 日期 和 时间 交货时间 否则。
一旦你有了 date 和 time 对(order/delivery)将它们与另一个 date 和 time 一对 MyDateTime
实例。
让我定义两个辅助函数来获取要用于比较的日期和整数对象。
private static Date getDateForComparison(MyDateTime myDateTime) {
if (myDateTime.getOrderedDate() != null) {
return myDateTime.getOrderedDate();
}
return myDateTime.getDeliveredDate();
}
private static String getTimeForComparison(MyDateTime myDateTime) {
if (myDateTime.getOrderedTime() != null) {
return myDateTime.getOrderedTime();
}
return myDateTime.getDeliveredTime();
}
然后,我们可以编写一个简单的比较器:
Comparator<MyDateTime> comparator = Comparator.comparing(MyDateTime::getDateForComparison)
.thenComparing(MyDateTime::getTimeForComparison);
P.S: Java Date
class 不推荐,必须视为弃用。检查 Java 8+ 替代品。
排序程序 首先按交货日期排序 & 如果同一日期有多个记录,则按交货时间排序(注意:如果一条记录同时有订购和交货日期,则应仅按交货日期排序)
08-JUN: 03.00, 6 月 8 日:04.00
然后查看没有交货日期的订购日期,它也存在于 08-JUN & 如果同一日期的多个记录按订购时间排序,则按订购日期排序
08-6 月:02.00
然后返回到下一个交货日期&如果有多个记录按交货时间排序
09-JUN: 01.00, 6 月 9 日:12.00
然后查看没有交货日期的订购日期,它也存在于 09-JUN & 如果同一日期的多个记录按订购时间排序,则按订购日期排序
09-6 月:14.00
**ordered date** **orderTime** **DeliveredDate** **DeliveredTime**
24-NOV-2021 10.00 24-NOV-2021 12.00
- - 24-NOV-2021 09.00
25-NOV-2021 9.00 - -
25-NOV-2021 11.00 26-NOV-2021 12.00
25-NOV-2021 10.00 - -
26-NOV-2021 02.00 - -
- - 10-DEC-2021 03.00
- - 10-DEC-2021 02.00
26-NOV-2021 04.00 - -
27-NOV-2021 07.00
30-NOV-2021 08.00 - -
28-NOV-2021 12.00
27-NOV-2021 14.00 - -
//输出应如下所示。-> 订购日期 订购时间 交货日期 交货时间
- - 24-NOV-2021 09.00
24-NOV-2021 10.00 24-NOV-2021 12.00
25-NOV-2021 9.00 - -
25-NOV-2021 11.00 26-NOV-2021 12.00
26-NOV-2021 02.00
26-NOV-2021 04.00 - -
27-NOV-2021 07.00 - -
27-NOV-2021 14.00 - -
28-NOV-2021 12.00 - -
30-NOV-2021 08.00 - -
- - 10-DEC-2021 03.00
- - 10-DEC-2021 02.00
//The code I tried.not giving exp OP. any other way ?.->
int compareVal;
if(o1.getDeliveredDate() != null && o2.getDeliveredDate()!=null){
compareValue = (o1.getDeliveredDate().compareTo(o2.getDeliveredDate()));
if (compareValue == 0 && o1.getDeliveredTime() != null && o2.getDeliveredTime() != null) {
return (o1.getDeliveredTime().compareTo(o2.getDeliveredTime()));
}
return comparevalue;
} else if(o1.getDeliveredDate() != null & && o2.getDeliveredDate()==null) {
compareValue = (o1.getDeliveredDate().compareTo(o2.getOrderedDate()));
if (compareValue == 0 ) {
return -1;
}
return comparevalue;
} else if(o1.getDeliveredDate() == null & && o2.getDeliveredDate()!=null) {
compareValue = (o2.getDeliveredDate().compareTo(o1.getOrderedDate()));
if (compareValue == 0 ) {
return 1;
}
return comparevalue;
} else if(o1.getDeliveredDate() == null && o2.getDeliveredDate()==null &&
o1.getOrderedDate() != null && o2.getOrderedDate()!=null) {
compareValue = (o1.getOrderedDate().compareTo(o2.getOrderedDate()));
if (compareValue == 0 && o1.getOrderedTime() != null && o2.getOrderedTime() != null) {
return (o1.getOrderedTime().compareTo(o2.getOrderedTime()));
}
}
return compareVal;
在你的输出中,最后两个必须颠倒过来。这是更正后的比较顺序。它假设有日期时就会有时间。
if (o1.getOrderedDate() != null && o2.getOrderedDate() != null) {
compareValue = (o1.getOrderedDate().compareTo(o2.getOrderedDate()));
if (compareValue == 0) {
return o1.getOrderedTime().compareTo(o2.getOrderedTime());
}
return compareValue;
} else if (o1.getDeliveredDate() != null && o2.getDeliveredDate() != null) {
compareValue = (o1.getDeliveredDate().compareTo(o2.getDeliveredDate()));
if (compareValue == 0) {
return o1.getDeliveredTime().compareTo(o2.getDeliveredTime());
}
return compareValue;
} else if (o1.getDeliveredDate() == null && o2.getOrderedDate() == null) {
compareValue = (o1.getOrderedDate().compareTo(o2.getDeliveredDate()));
if (compareValue == 0) {
return o1.getOrderedTime().compareTo(o2.getDeliveredTime());
}
return compareValue;
} else {
compareValue = (o1.getDeliveredDate().compareTo(o2.getOrderedDate()));
if (compareValue == 0) {
return o1.getDeliveredTime().compareTo(o2.getOrderedTime());
}
return compareValue;
}
注意:要比较两个时间值,您不应依赖字符串的自然排序。例如:它认为 11
< 9
。如果您总是为 0 到 9 小时添加 0
前缀,那么您就很好。
另一种更简单的方法
本质上,您想比较两个对象中的两个 Date/time(让我称它为 MyDateTime
作为 class 名称)即给定两个 MyDateTime
实例,您想选择 订单 的 日期 和 时间 - 如果不存在,请选择 日期 和 时间 交货时间 否则。
一旦你有了 date 和 time 对(order/delivery)将它们与另一个 date 和 time 一对 MyDateTime
实例。
让我定义两个辅助函数来获取要用于比较的日期和整数对象。
private static Date getDateForComparison(MyDateTime myDateTime) {
if (myDateTime.getOrderedDate() != null) {
return myDateTime.getOrderedDate();
}
return myDateTime.getDeliveredDate();
}
private static String getTimeForComparison(MyDateTime myDateTime) {
if (myDateTime.getOrderedTime() != null) {
return myDateTime.getOrderedTime();
}
return myDateTime.getDeliveredTime();
}
然后,我们可以编写一个简单的比较器:
Comparator<MyDateTime> comparator = Comparator.comparing(MyDateTime::getDateForComparison)
.thenComparing(MyDateTime::getTimeForComparison);
P.S: Java Date
class 不推荐,必须视为弃用。检查 Java 8+ 替代品。