如何仅使用一次迭代从文件创建两个 HashMap

问题描述

.csv 中的文件包含一系列正确的文本行。每个奇数行包含一个集合 由分号分隔的值,对应于超类或子类的单个对象,具体取决于行中的值编号。每个偶数行包含一个工作日的购买,由前一个奇数行定义。类和子类都取自工厂。我需要:

  1. 将 in.csv 文件内容加载到地图中,其中购买是关键 最后 购买 的 工作日 是
  2. 打印
  3. 将 in.csv 文件内容加载到地图中,其中购买是关键 第一 次 购买 的 工作日 是 一个 价值 ;
  4. 打印 每个 周期

输入数据示例:

bread;155;1;20
MONDAY
milk;131;2
SUNDAY
bread;154;3
FRIDAY
bread;155;5
SUNDAY
potato;80;2;10
FRIDAY
butter;270;1
SUNDAY
butter;241;1;50
WednESDAY
meat;800;2;90
THURSDAY
potato;80;5;10
THURSDAY
milk;131;2
WednESDAY
bread;154;3
THURSDAY
bread;155;5
SUNDAY
meat;900;2;70
MONDAY
potato;80;2;10
MONDAY

下面是我的代码。有没有更简单的方法来做到这一点?

public class Runner {
  public static void main(String[] args) {
    final String PACKAGE = "Task1/src/";
    final String EXT = ".csv";
    Scanner sc;
    HashMap<Purchase,String>firstPurchaseMap = new HashMap<Purchase,String>();
    HashMap<Purchase,String>lastPurchaseMap = new HashMap<Purchase,String>();

    try{
        sc = new Scanner(new FileReader(PACKAGE + args[0] + EXT));
        while (sc.hasNextLine()){
            String key = sc.nextLine();
            String value = sc.nextLine();
            Purchase purchase = PurchaseFactory.getClassFromFactory(key);
        if(firstPurchaseMap.containsKey(purchase)){
           int day1 = WeekDay.valueOf(value).ordinal();
           int day2 = WeekDay.valueOf(firstPurchaseMap.get(purchase)).ordinal();
             if (day1 < day2) {
               String tmp = firstPurchaseMap.get(purchase);
               removeItem(firstPurchaseMap,purchase);
               firstPurchaseMap.put(purchase,value);
               lastPurchaseMap.put(purchase,tmp);
          } else {
            lastPurchaseMap.put(purchase,value);
          }
        } else {
           firstPurchaseMap.put(purchase,value);
        }
    } catch (FileNotFoundException e) {
        System.out.println("file not found");
    }
    printMap(firstPurchaseMap);
    System.out.println();
    printMap(lastPurchaseMap);
    System.out.println();
}

这就是我的结果(分别是第一张和第二张地图)

bread;1.55;1;0.20;1.35 = MONDAY
butter;2.70;1;2.70; = SUNDAY
butter;2.41;1;0.50;1.91 = WednESDAY
milk;1.31;2;2.62; = SUNDAY
meat;9.00;2;0.70;16.60 = MONDAY
bread;1.55;5;7.75; = SUNDAY
potato;0.80;2;0.10;1.40 = MONDAY
potato;0.80;5;0.10;3.50 = THURSDAY
bread;1.54;3;4.62; = THURSDAY

milk;1.31;2;2.62; = WednESDAY
meat;9.00;2;0.70;16.60 = THURSDAY
bread;1.55;5;7.75; = SUNDAY
potato;0.80;2;0.10;1.40 = FRIDAY
bread;1.54;3;4.62; = FRIDAY

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)