我正在获取一个订单列表,并将对象存储在列表中。该对象有一个名为String DeliveryTime
的属性,时间为'HH:MM a'
格式。我想按对象的deliveryTime升序对列表进行排序。我创建了一个只有deliveryTime的字符串列表,并使用气泡排序按升序对它们进行排序。但是我很难按照这个顺序对整个对象列表进行排序。
注意:对象列表有一些null
&“asap”
作为它们的DeliveryTime
值。
以下是不完整的代码:
List<OnlineDeliveryOrder> getSortedOrdersList(
List<OnlineDeliveryOrder> orderList,
) {
List<OnlineDeliveryOrder> tempOrderList = [];
List<DateTime> sortedTimeList = [];
print("List Length before Sort: " + orderList.length.toString());
orderList.forEach((OnlineDeliveryOrder order) {
if (order.deliveryTime != null && order.deliveryTime != "ASAP")
sortedTimeList.add(DateFormat('hh:mm a').parse(order.deliveryTime));
});
sortedTimeList =
sortedTimeList.toSet().toList(); //Taking the unique times only
//Sorting times in asc order using bubble sort algorithm
bool sorted = false;
while (!sorted) {
sorted = true;
for (int i = 0; i < sortedTimeList.length - 1; i++) {
DateTime tempTime;
if (sortedTimeList[i].compareTo(sortedTimeList[i + 1]) == 1) {
// dt1.compareTo(dt2) == 1 if dt1 is a later date than dt2
tempTime = sortedTimeList[i];
sortedTimeList[i] = sortedTimeList[i + 1];
sortedTimeList[i + 1] = tempTime;
sorted = false;
}
}
}
// HOW DO I SORT THE ENTIRE LIST
print("List Length after Sort: " + tempOrderList.length.toString());
// String time = DateFormat('hh:mm a').format(element);
return tempOrderList;
}
为什么要自己实现一个时间复杂度为O(n^2)的排序算法?您可以使用
List<OnlineDeliveryOrder> getSortedOrdersList(List<OnlineDeliveryOrder> orderList){
var format = DateFormat('hh:mm a');
return List.of(orderList)..sort((a,b){
if(a.deliveryTime == null) return 1;
if(b.deliveryTime == null) return -1;
if(a.deliveryTime == 'ASAP') return 1;
if(b.deliveryTime == 'ASAP') return -1;
return format.parse(a.deliveryTime).compareTo(format.parse(b.deliveryTime));
});
}
这样,所有对象首先使用有效日期,然后使用'asap'
,然后使用null
作为DeliveryTime
。
或者,如果您希望它在没有任何包的情况下更高效:
class SortObject extends Comparable<SortObject>{
static final DateFormat format = DateFormat('hh:mm a');
final OnlineDeliveryOrder order;
final DateTime? deliveryTime;
SortObject(this.order):this.deliveryTime=order.deliveryTime==null||order.deliveryTime=='ASAP'?null:format.parse(order.deliveryTime);
int compareTo(SortObject other){
if(order.deliveryTime == null) return 1;
if(other.order.deliveryTime == null) return -1;
if(order.deliveryTime == 'ASAP') return 1;
if(other.order.deliveryTime == 'ASAP') return -1;
return deliveryTime!.compareTo(other.deliveryTime!);
}
}
List<OnlineDeliveryOrder> getSortedOrdersList(List<OnlineDeliveryOrder> orderList){
return (orderList.map((a)=>SortObject(a)).toList()..sort((a,b){
return a.compareTo(b);
})).map((a)=>a.order).toList();
}
我正在为我叔叔做一个应用程序,他让我做来挑战我。我认为这是学习颤振/飞镖的绝佳机会。我有这段代码(下面),但我需要它按日期时间组织一个列表(第77行)。每个条目至少有一个字符串id、一个DateTime变量、一个字符串名称和一些正文文本。
如何按照一个属性的字母顺序(不是名称,而是属性所包含的实际值)对一个对象列表进行排序?
我目前有一个应用程序,可以显示1.5公里半径内附近的医院,它看起来是这样的: 我遇到的麻烦是,我不知道如何根据他们从最低到最高的计算距离来排序卡片。 我创建了一个来存储计算的距离列表,并用对其进行排序。 我如何确保小部件将遵循排序的距离值的顺序?
我有这个列表,我想在我的屏幕上按照时间[“time in”]对它进行排序。有人知道我该怎么做吗?
我有产品列表,其中包含产品名称和日期。我想根据日期和时间对项目列表进行排序。这是我要排序的项目列表, 这是我想要的预期输出,
我有: 我需要根据我做的字母表排列单词。 我目前的方法是使用for cycles。 我已经为这段代码编写了一些基础,但在开始认真的“循环”之前,我想问一下还有什么其他方法。 谢谢 后续更改Java中字符串列表中的特定字符