Hashmap很容易进入csv / excel?

时间:2015-01-30 18:01:59

标签: java excel csv hashmap treemap

我需要一些帮助。

我在TreeMap TreeMap<String,TreeMap<String,Integer>>

中有TreeMap

我的文本输出如下所示(单行示例):

Phoneme "Y":     ["**"=46,15%] ["I"=30,77%] ["Y"=7,69%] ["i:"=15,38%] 

这意味着音素Y在31%被认可为我,7,7%为Y等......

因此,我需要一个表(电子表格),它在每个Phoneme上具有垂直(选定的音素)和水平(预测)行,而在单元格中具有与所选行和行相对应的概率。这意味着例如在线&#34; Y&#34;如上所述的概率,其他一切都是0%

最佳解决方案是什么?我应该手动编程来获取这些信息并将其按顺序保存在csv中,还是有更好的方法?

2 个答案:

答案 0 :(得分:1)

使用API​​没有任何问题,特别是如果您希望数据包含特殊字符。但是,这里有一个Java 8 one liner,你可以使用它,如果你有一个CSV API,它会更干净:

treeMap.entrySet().forEach((e)->{
    System.out.print("\""+e.getKey()+"\"");
    e.getValue().entrySet().forEach((m)->System.out.print(",\"" + m.getKey() + "\"," + m.getValue()));
    System.out.println();
});

“Y”, “**”,46.15, “I”,30.77, “Y”,7.69, “I”,15.38

答案 1 :(得分:0)

以下是使用传统Java创建表格CSV输出但没有外部库的示例。

static String toCSV(Map<String, Map<String, Integer>> phonemeStats)
{
    StringBuilder csv = new StringBuilder(512);

    // get ordered set of all statistic names
    Set<String> statNames = new TreeSet<String>();
    for (Map<String, Integer> stats: phonemeStats.values()) {
        statNames.addAll(stats.keySet());
    }

    // write column headings line
    csv.append("phoneme");
    for (String name: statNames) {
        csv.append(",").append(name);
    }

    // write each phoneme line
    for (Map.Entry<String, Map<String, Integer>> entry: phonemeStats.entrySet()) {
        csv.append(System.lineSeparator());
        csv.append(entry.getKey());
        for (String name: statNames) {
            Integer value = entry.getValue().get(name);
            csv.append(",");
            if (value != null) {
                csv.append((value / 100d) + "%");
            }
        }
    }

    return csv.toString();
}

使用此输入(作为Map<String, Map<String, Integer>>):

Phoneme "Y":     ["**"=46,15%] ["I"=30,77%] ["Y"=7,69%] ["i:"=15,38%] 
Phoneme "Z":     ["**"=32,45%] ["I"=10,42%] ["X"=26,97%] ["i:"=5,38%] 

上述方法返回:

phoneme,**,I,X,Y,i:
Y,46.15%,30.77%,,7.69%,15.38%
Z,32.45%,10.42%,26.97%,,5.38%

然后您可以将该输出写入.CSV文件并在Excel中打开它。