我将有一个以这种方式包含日期的列表mm/YYYY
。我需要重新排序列表中的数据。
首先:
在列表中,我将有数据如下
yearList.add("042011");
yearList.add("052011");
yearList.add("062011");
yearList.add("072011");
yearList.add("082011");
yearList.add("092011");
yearList.add("102010");
yearList.add("112010");
yearList.add("122010");
yearList.add("012011");
yearList.add("022011");
yearList.add("032011");
我使用了Collections.sort(yearList);
但是输出结果给了我
[012011, 022011, 032011, 042011, 052011, 062011, 072011, 082011, 092011, 102010, 112010, 122010]
但我需要输出如下。
[102010,112010,122010,012011,022011,032011,042011,052011, 062011,072011,082011,092011]
答案 0 :(得分:3)
基本上,您当前的列表已按“文本自然”顺序排序,不会按预期排序数字(或日期)。相反,您需要提供自定义Comparator
来更改排序的工作方式,例如
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
public class SortList {
public static void main(String[] args) {
List<String> yearList = new ArrayList<>(25);
yearList.add("042011");
yearList.add("052011");
yearList.add("062011");
yearList.add("072011");
yearList.add("082011");
yearList.add("092011");
yearList.add("102010");
yearList.add("112010");
yearList.add("122010");
yearList.add("012011");
yearList.add("022011");
yearList.add("032011");
Collections.sort(yearList, new Comparator<String>() {
private DateFormat format = new SimpleDateFormat("MMyyyy");
@Override
public int compare(String o1, String o2) {
int result = 0;
try {
Date d1 = format.parse(o1);
try {
Date d2 = format.parse(o2);
result = d1.compareTo(d2);
} catch (ParseException ex) {
result = -1;
}
} catch (ParseException ex) {
result = 1;
}
return result;
}
});
System.out.println(yearList);
}
}
哪个输出[102010, 112010, 122010, 012011, 022011, 032011, 042011, 052011, 062011, 072011, 082011, 092011]
答案 1 :(得分:2)
您可以改为使用Collections.sort(List, Comparator)
表单并将其传递给自定义Comparator
,并考虑字符串的格式
答案 2 :(得分:2)
您可以使用比较器并使用字符串的前2个字符并将其解析为int
<强>样品:强>
Collections.sort(yearList, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
if(Integer.parseInt(s1.substring(2, 6)) == Integer.parseInt(s2.substring(2, 6)))
return Integer.parseInt(s1.substring(0, 2)) - Integer.parseInt(s1.substring(0,2));
else
return Integer.parseInt(s1.substring(2, 6)) - Integer.parseInt(s2.substring(2, 6));
}
});
System.out.println(yearList.toString());
<强>结果:强>
[102010, 112010, 122010, 012011, 022011, 032011, 042011, 052011, 062011, 072011, 082011, 092011]
答案 3 :(得分:1)
目前,mmyyyyy
被归类为简单的String
如果您使用此方法http://docs.oracle.com/javase/7/docs/api/java/util/Collections.html#sort(java.util.List,%20java.util.Comparator),则可以提供自己的比较方法。
在此方法中,您需要拆分mm
和yyyy
并将其放入int
变量,以便根据您的要求进行排序。