JAVA ArrayList利用Comparator实现自定义排序
? ? ? ? ? 先說遇到的問題吧,,,ArrayList<String> ?里面存放的本地文件路徑,然后通過這個路徑找到文件,按照文件的最后修改時間排序,,,,提起來沒啥問題的,。,,當時寫的代碼這樣的:?
? ? ? ? ?//根據路徑對應的文件最后修改時間排序
private class SortByLastModifyTime implements Comparator {
@Override
public int compare(Object o1, Object o2) {
?try {
File file1 = new File((String)o1);
?File file2 = new File((String)o2);
?if (file1.lastModified() < file2.lastModified()){
?return 1;
?}else{
?return 0;
?}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return 0;
}
}
}
? ?//最后發現,怎么都不能實現排序,,,搞得人郁悶啊。,。,,奇怪怎么回事呢》?
? ? 檢查代碼都沒問題吧,,,但是我還是相信,肯定是我的原因, 沒辦法,找吧。。。。
? ?最后查看文檔,發現返回值有正數,0,有負數。。。。那我上面為啥只寫正數1,0呢》? 為啥沒負數呢?
? 原因找到了:
? ? ??int compare(Object o1, Object o2) 返回一個基本類型的整型
? ?如果要按照升序排序,
? ? ?則o1 小于o2,返回-1(負數),相等返回0,01大于02返回1(正數)
? ? 如果要按照降序排序
? ? ?則o1 小于o2,返回1(正數),相等返回0,01大于02返回-1(負數)
? ?
? ?所以: 上面的問題就很明顯了,
//根據路徑對應的文件最后修改時間排序
private class SortByLastModifyTime implements Comparator {
@Override
public int compare(Object o1, Object o2) {
?try {
File file1 = new File((String)o1);
?File file2 = new File((String)o2);
?if (file1.lastModified() < file2.lastModified()){
?return 1;
?}else{
?return -1;
?}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return -1;
}
}
}
總結: 其實寫代碼遇到問題很正常的,保持一個平和的心態去解決,一切都可以搞定的
總結
以上是生活随笔為你收集整理的JAVA ArrayList利用Comparator实现自定义排序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [网鼎杯 2020 朱雀组]phpweb
- 下一篇: 零基础想考HCIP(华为认证网络工程师)