【问题标题】:Sorting Arraylist with multiple data types by date (numeric)按日期(数字)对具有多种数据类型的 Arraylist 进行排序
【发布时间】:2014-11-08 01:00:27
【问题描述】:

这就是我所拥有的。我正在扫描 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 中的每一行都是这样的

购买,2002 年 1 月 2 日,IBM,30,135.00

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

【问题讨论】:

  • 我认为你应该对数组进行排序

标签: java sorting arraylist


【解决方案1】:

首先,为什么不尝试通过“,”解析每一行并将其放入具有状态和方法的类中,这样您就可以使用比较器对数组列表进行排序,请参阅我的示例。

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());

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

【讨论】:

    【解决方案2】:

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

    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
            }
        }
    });
    

    【讨论】:

      猜你喜欢
      • 2017-04-19
      • 2020-01-21
      • 2021-04-03
      • 1970-01-01
      • 1970-01-01
      • 2020-02-06
      • 1970-01-01
      • 2016-10-31
      相关资源
      最近更新 更多