遇到了一个小问题,我甚至知道如何在理论上修复它,但实际上无法实现它。
我得到了这段代码:
Multimap<String, String> mm = HashMultimap.create();
public MultiMapper(String AttributeName, String AttributeValue)
{
mm.put(AttributeName, AttributeValue); }
从这里打电话:
for(Element attributeFirst : attributeTop.getChildren()) {
String attributeTopName = attributeTop.getName().toString();
MultiMapper m = new MultiMapper();
for(Attribute attributeSecond: attributeFirst.getAttributes()){
String AttributeName = attributeSecond.getName().toString();
String AttributeValue = attributeSecond.getValue().toString();
m.MultiMapper(AttributeName, AttributeValue);
}
}
XML文件:
编辑:main-Method(我更改了名称)的唯一目的是创建一个新的Multimap并用值填充其字段。例如:第一个for-loop有5个Elements,所以我想生成5个不同的Multimaps,这是我现在最关心的问题,无法得到它。第二个for循环包含地图的值,这些值通过放入main方法放入地图中。
困扰我的第二个问题:attributeTopName是父节点的名称,我想故意将Map命名为。但是你不能将数据类型字符串映射到Multimap。所以我如何将这个属性作为一种键放入地图中,这样当我想引用该列表时,我使用attributeNameTop值来获取Multimap。就像在Codeexample中一样,而不是mm我想要attributeNameTop的值。
我希望这个编辑可以让我更清楚我想做什么。
EDIT2: 我的输入文件看起来像这样,当然有更多的线,想要保持简单。每一行代表我的类图中的一个类,其中包含Attributes和Values。我想为每个类创建一个对象,并将其保存在某个地方,以便在项目中进一步使用。当我遍历Inputfile时,我将AttributeTopName1作为第一个类,然后应该创建一个新的Object,它具有相同的名称和我通过下一个循环获得的属性。我测试了它,输入文件是正确的形式,解析对于这个任务是可以的。
<Model>
<Package>
<AttributeTopName1 Attribute1=AttributeValue1 Attr2=AttributeValue2 />
<AttributeTopName2 Attribute1=AttributeValue1 Attr2=AttributeValue2 />
</Package>
</Model>
答案 0 :(得分:1)
不幸的是,以下句子没有多大意义。
该文件包含多个对象,我在第一个循环(attributeTop)中迭代,我想为第一个for循环中的每个计数创建一个自己的Multimap。
正如之前的评论所述, MultiMapper 应该在for循环之外声明。您的代码不会对以下值执行任何操作
也许您应该提供更多 main 方法,因为它似乎绝对不会影响循环中的数据。另外,我们是否要理解 main 方法是 MultiMapper 类的一部分?
最后,你真的不应该重载方法名称 main 。它应该保留给实际的主方法。
答案 1 :(得分:1)
我猜测Element
看起来像这样:
class Element {
private final String name;
private final List<Attribute> attributes;
Element(String name, List<Attribute>) {this.name = name; this.attributes = attributes;}
String String getName() { return name; }
String List<Attribute> getAttributes() { return attributes; }
}
Attribute
看起来像
class Attribute {
private final String key;
private final String value;
Attribute (String key, String value) {this.key = key; this.value = value;}
String getKey(){return key;}
String getValue(){return value;}
}
因此,您迭代的数据结构是对列表的列表:
[Element1Name:[[Attr1Key, Attr1Val], [Attr2Key, Attr2Value]],
Element2Name:[[Attr3Key, Attr3Val],
...]
到目前为止我是对的吗?
在你的问题中,你说你想为每个元素创建一个单独的MultiMap。如果我们将每个MultiMap存储在Map中,它将类似于:
Map<String, Multimap<String, String>> multimaps = new HashMap<String, Multimap<String, String>>();
for(Element element : listOfElements) {
String elementName = element.getName();
MultiMap<String, String> mm = new HashMultimap.create();
for(Attribute attribute: element.getAttributes()){
String attributeName = attribute.getName();
String attributeValue = attribute.getValue();
mm.put(attributeName, attributeValue);
}
multimaps.put(elementName, mm);
}
现在我们可以通过调用:
来检索所需的MultimapMultimap<String, String> mm = multimaps.get("ElementName");