将映射的列表输出限制为每行 X 个条目

Limit list output from a map to X entries per line

我有一个词映射,键是提供列表中的关键字,值是整数列表,在我的文档中具有关键字的索引。

我想将每行的列表条目限制为设定数量。类似于:

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 =
    []

换行:

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

收件人:

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

此外,您遇到了一个问题,即您不想在地图的条目上换行,而是在存储在地图的单个键中的列表的第 3 个条目上换行。

所以,你需要这样的东西:

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 :或每第 3 个元素,打印一个 carriage-return / line feed.