我有一个关于排序数组的问题。
我有一个这样的数组:
long[][] allDate = new long[lenght][2];
和价值是:
allDate[][0]
代表以毫秒为单位的日期
并且allDate[][1]
在这种情况下代表了它之前的日期价格
例如
allDate[0][0] = 142142141
allDate[0][1] = 90
日期的 allDate[][0]
值始终是将来的
我想要做的是按递增的时间逻辑对这个日期进行排序。
但问题是我想保留它们的价格,所以我可以把它添加到我的Jfreechart折线图中。
在这个循环中
for (int i = 0; i < a7; i++) {
int day = (int) (new Date().getTime() + allDate[i][0] / (1000 * 60 * 60 * 24));
int month = (int) (new Date().getTime() + allDate[i][0] / (1000 * 60 * 60));
int year = (int) (new Date().getTime() + allDate[i][0] / (1000 * 60));
s1.add(new Day(day, month, year), (eWallet + allDate[i][1]));
}
任何想法如何排序?
答案 0 :(得分:4)
和valus是:allDate [] [0]以毫秒为单位代表日期,allDate [] [1]代表值,在这种情况下是从之前的日期价格
所以第一个我要做的就是避免将它们存储为2D数组。而是存储这对值的1D集合(无论是数组还是列表):
PriceSnapshot[] prices = ...;
PriceSnapshot
包含一个时间戳(无论是long
,Date
,Joda时间Instant
等等等等)和价格。
此时,您可以轻松编写Comparer<PriceSnapshot>
以按时间比较,并使用它进行排序。当然你可以写一个Comparer<long[]>
,但那不会那么好。
(另请注意,对于您当前的循环,您将“当前时间”视为3次,这意味着您可能会以不同的日期结束。不好主意。拍摄单个快照“现在“然后反复使用它。”