2016-04-12 48 views
0

我有一個單詞的地圖,其中的關鍵字是來自提供的列表中的關鍵字,該值是包含我文檔中關鍵字索引的整數列表。限制從地圖輸出到每行X條目的列表

我想將每行列表的條目限制爲一個設定的數量。喜歡的東西:

and = 
    [1,2,3, 
    4,5,6] 

,但我不斷收到:

and = 
    [1,2,3,4,5,6] 

我有什麼權利現在:

private Map<String, List<Integer>> keywordMap = new HashMap<String, List<Integer>>(); 
... 
try (PrintWriter writer = new PrintWriter(new BufferedWriter(new FileWriter(properties.getProperty("output.dir") + properties.getProperty("output.file.keyword"))))) 
{ 
    int limit = 0; 

    for (Map.Entry<String, List<Integer>> entry : keywordMap.entrySet()) 
    { 
     writer.print(entry.getKey() + " =\n" + entry.getValue()); 
     limit++; 

     if (limit == 3) 
     { 
      writer.print("\n"); 
      limit = 0; 
     } 
    } 
}... 

此外,作爲獎金的問題,我將如何去輸出情況該關鍵字不在文檔中?或者只是

portmanteau = 
    [] 
+0

是否有與獎金問題相關的獎勵獎勵? –

+0

我的永恆感激之聲不錯? – ownificate

+0

對於你的第一個問題:你必須編寫一個循環來在每個''for each'循環的每次迭代中分割'entry.getValue()'。 –

回答

0

更改行:

writer.print("\n"); //Line feed only 

要:

writer.print("\n\r"); //Carriage return + line feed 

此外,你必須要打破行無法在地圖上的條目的問題,但在列表的第三個條目中存儲在地圖的單個鍵中。

所以,你需要這樣的:

for (String key: keywordMap.keySet()) { 
    List<Integer> values = keywordMap.get(key); 
    writer.print(key + "=\n\r["); 
    for(int i = 0; i < values.length(); i++){ 
     writer.print(values.get(i)); 
     if(i % 3 == 0){ 
      writer.print("\n\r"); 
     } 
    } 
    writer.print("]\n\r"); 
} 

如果你正在處理每一個鍵和獲取它的值的關聯列表。 然後使用for循環遍歷值列表,並在每次迭代時(如果計數器的值爲i%3 == 0:或每第三個元素)打印回車/換行符。