如何使用Java LocalTime类比较无日期时间实现配送时间数据排序
字符串转LocalTime的正确实现
你原代码中的调用方式错误,LocalTime没有直接接收时间字符串的构造方法,需要调用它的静态parse()方法完成转换。HH:MM:SS是Java默认支持的时间格式,不需要额外自定义格式器,直接调用即可:LocalTime deliveryTime = LocalTime.parse(rdDeliveryTimeStr);
完整排序实现
不需要手写排序逻辑,直接调用集合自带的排序方法即可,代码更简洁且稳定性更高:
// 对存储配送数据的LinkedList直接按配送时间升序排序 roadDataToBeSorted.sort((o1, o2) -> { LocalTime time1 = LocalTime.parse(o1.rdDeliveryTime); LocalTime time2 = LocalTime.parse(o2.rdDeliveryTime); return time1.compareTo(time2); });
如果你要沿用自己手写的排序逻辑,只需要把对应位置的LocalTime构造替换为parse调用即可:
for (int i = 0; i < stopOrderByDeliveryTime.size() - 1; i++) { if (LocalTime.parse(stopOrderByDeliveryTime.get(i).rdDeliveryTime).isBefore(LocalTime.parse(stopOrderByDeliveryTime.get(i+1).rdDeliveryTime))) { // add element at index (it is earlier than later elements) } else { // add element to end since it is later than all prior elements } }
注意事项
- 如果CSV中的时间字符串存在格式不规范的情况,parse方法会抛出
DateTimeParseException,建议提前对原始数据做格式校验,或者在转换时添加try-catch处理异常 - LinkedList自带的sort方法性能优于手写循环排序,数据量偏大的场景更推荐使用自带方法
内容的提问来源于stack exchange,提问作者CoolHands
相关产品推荐
相关产品推荐

