2017-08-03 16 views
0

我有一個csv文件,它定義了不同貨幣之間的關係。因此,要了解一種貨幣與另一種貨幣之間的關係,我決定使用Map of Map,其中的關鍵字將是源貨幣名稱,並且值將再次爲Map(關鍵字:目標貨幣名稱,值:關係類型)。通過擁有這樣的數據結構,我可以通過尾遞歸來找到源貨幣與目標貨幣之間的關係。Java csv庫創建映射給定關係矩陣圖

示例CSV文件:
/AUD CAD CNY CZK DKK EUR GBP JPY NOK NZD USD
AUD 1美元美元美元美元美元美元美元美元美元d
CAD USD 1美元美元美元美元美元美元USD USD d
CNY USD USD 1 USD USD USD USD USD USD USD D

要創建這樣的數據結構,我創建了下面的方法,但它看起來過於冗長。所以我想知道是否有已經存在的庫可以解決我的目的。我嘗試了Apache常見的IO,但無法得到我正在尋找的東西。 方法:
公共靜態地圖> generateCurrencyMatrix( 字符串currencyMatrixFilePath){ 地圖> currMatrixContext = 新的HashMap>(); Map termCurrencies = new HashMap();

// try with resources to close in case of exception 
    try (BufferedReader br = new BufferedReader(new FileReader(
      currencyMatrixFilePath))) { 
     String line; 
     boolean headerLineIndicator = true; 
     while ((line = br.readLine()) != null) { 
      if (headerLineIndicator) { 
       List<String> termCurr = Arrays.asList(line 
         .split(Constant.delimiter)); 
       IntStream.range(1, termCurr.size()).forEach(i -> { 
        termCurrencies.put(i, termCurr.get(i).trim()); 
       }); 
       headerLineIndicator = false; 
      } else { 
       List<String> relationship = Arrays.asList(line 
         .split(Constant.delimiter)); 
       Map<String, String> relation = new HashMap<String, String>(); 
       IntStream.range(1, relationship.size()).forEach(
         i -> { 
          relation.put(termCurrencies.get(i).trim(), 
            relationship.get(i).trim()); 
         }); 
       currMatrixContext.put(relationship.get(0).trim(), relation); 
      } 

     } 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    return currMatrixContext; 
} 
+0

確實該地圖的參數化版本看起來像地圖>上下文;關鍵是哪裏的columnName和值是列?然後通過關係向後引用爲關係,其中值是列中的鍵,鍵是否在值中? – AnthonyJClink

回答

0

想到我不明白的要求,我想你可以試試MultiValueMap。