按日期排序多种数据类型的Arraylist(数字)

时间:2014-11-08 01:00:27

标签: java sorting arraylist

这就是我所拥有的。我扫描txt并将其作为字符串传递给数组(每行)。我需要按日期排序

   package stocktest;

import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Scanner;

/**
 */
public class StockTest {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        ArrayList aList = new ArrayList();

        java.io.File file = new java.io.File("transactions.txt");

        try {
            Scanner input = new Scanner(file);
            while (input.hasNext()) {
                String data = input.nextLine();
                 aList.add(data);
                System.out.println(aList);
            }
        } catch (FileNotFoundException e) {
            System.err.format("File does not exist/n");

        }
    }

}

transaction.txt中的每一行都是这样的

买的,1/2/2002年,IBM,30,135.00

我需要按日期对列表进行排序。 你觉得我应该怎么做? 提前致谢。

2 个答案:

答案 0 :(得分:0)

首先,为什么不尝试用","来解析每一行?并将它放到一个具有状态和方法的类中,你可以使用比较器对数组列表进行排序,参见我的例子。

  

private List<OrderDTO> orderDTOs;

public class OrderDtoDateDescComparator  implements Comparator<OrderDTO>  {
    @Override
    public int compare(OrderDTO orderDTO, OrderDTO other) {
        if (orderDTO.getDateCreated() != null && other.getDateCreated() != null) {
            return orderDTO.getDateCreated().compareTo(other.getDateCreated());
        } else if (orderDTO.getDateCreated() != null && other.getDateCreated() == null) {
            return 1;
        } else if (orderDTO.getDateCreated() == null && other.getDateCreated() != null) {
            return -1;
        } 
        return 0;
     }
}
  

Collections.sort(this.orderDTOs, new OrderDtoDateDescComparator());

现在看,这很容易。原样。

答案 1 :(得分:0)

这是比较器的一个很酷的用例。

Collections.sort(aList, new Comparator<String>() {

    public int compare(String s1, String s2) {
        SimpleDateFormat format = new SimpleDateFormat("MM/dd/yy");
        try {
            Date d1 = format.parse(s1.split(",")[1]);
            Date d2 = format.parse(s2.split(",")[1]);
            return d1.compareTo(d2);
        } catch (ParseException e) {
            // handle exception
        }
    }
});