在Java中以不同方式对数组进行排序

时间:2014-12-16 14:42:34

标签: java sorting linked-list

我有一张地图(String,LinkedList)mp。这对应于这样的表:

Name   Date      Dept
Tony   4/1/2014  55125
Bob    3/2/2013  54112
Jill   7/2/2014  55265

(我刚刚为这个例子做了这些。第一行(Name,Date,Dept)是标题,对应于地图中的键值(所以你做一个mp.get(“Name”)例如对于Date,返回的链表是< 4/1 / 2014,3 / 2 / 2013,7 / 2/2014>并且Dept是< 55125,54112,55265>等。

我需要获取值的列表然后对其进行排序。对于Name和Dept,我相信我可以只做一个Collections.sort(),但这对日期不起作用。如果日期是yyyymmdd它会起作用,但是日期是mm / dd / yyyy,这不能保证正确排序,通常不会。我想我可以处理每个条目并将其更改为yyyymmdd,但有些字段将为空(或者可能为null但我认为是空白的。)

我可以轻松确定何时正常排序以及何时按日期排序。只是不确定如何使用Collections.sort()或其他东西来排序日期列表。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

Collections.Sort方法允许您(可选)指定您自己的Comparator。在您的情况下,当您对日期列进行排序时,您需要提供自己的比较器。

如果您使用的是Java 8,那么代码将如下所示:

Collections.sort(dataMap.get("Date"), (date1, date2) -> compareDates(date1, date2));

然后compareDates方法需要能够处理空值,并且需要拉开日期组件并返回从date1到date2的天数。您可以轻松地使用java.util.Date对象来执行此操作 - 只需转换日期(可能使用DataFormat)然后进行比较。