将 MultiLabelDataset<String, String> 转换为 Guava Multimap 以进行打印/检查

convert MultiLabelDataset<String, String> to Guava Multimap for printing / examining

我正在使用以下程序:

public static void main(String[] args) throws Exception
{
    String input = args[0];

    InputStream is = new BufferedInputStream( new FileInputStream( input ) );

    toMultiLabelDataset(is);
    is.close();
}

public static MultiLabelDataset<String, String> toMultiLabelDataset(InputStream is) throws IOException
{
    List<RelationAndMentions> relations = toRelations(is, true);
    MultiLabelDataset<String, String> dataset = toDataset(relations);

    return dataset;
}

如您所见,它使用了 MultiLabelDataset<String, String> 形式的数据结构,我想以人类智能形式打印那个野兽的内容。根据我之前的搜索,我可能会使用 apache string utils 或 google guava 库,对吗?我该怎么做呢?

我的猜测是那些库中有一个等效的数据结构,需要 <String, String>,我只需要确定那是什么,复制 MultiLabelDataset<String, String> 的内容然后打印?这合理吗?

编辑


    Multimap<String, String> result = HashMultimap.create();
    for (String key : ((MultiLabelDataset) dataset).items) 
    {
        for (String value : dataset.getLabels()) 
        {
            result.put(key, value);
        }
    }

^不是那样的。

假设是这个MultiLabelDataset, then it's similar to Guava's Multimap,你可以很容易地转换它。但是,与直接转换为 String 相比,这种转换既不简单也不智能。唯一的好处是此后您可以使用具有许多有用方法的理智 Java class 并与其他 Java classes.

一起工作。

整个转换一如既往,但您需要一些东西来迭代键。假设唯一的实现是 LabeledLDADataset,很简单:

Multimap<String, String> toMultimap(MultiLabelDataset<String, String> dataset) {
    Multimap<String, String> result = HashMultimap.create();
    for (Item key : ((LabeledLDADataset) dataset).items()) {
        result.putAll(key.toString(), dataset.getLabels(key));
    }
    return result;
}