#java
#java
Вопрос:
Я хочу создать хэш-карту, которая должна иметь значение «Ключ», а узел — «Значение». Могу ли я узнать, как мне это сделать, используя hashmap? Я буду создавать две хэш-карты по аналогичному шаблону, позже хочу сравнить их на основе ‘Key (srv_field). Дайте мне знать, как мне инициализировать и сохранить необходимые данные в hashmap.
Входной xml, как показано ниже.
<?xml version="1.0" encoding="UTF-8"?>
<menu-details>
<menu name="HCOTA">
<group name="cota" type="M">
<page-details>
<page>
<name>cotacrit</name>
<field>
<field-type></field-type>
<srv-field>taChrgOffMsg.taChrgOffCrit.funcCode</srv-field>
<ui-field>funcCode</ui-field>
<label>FLT000204</label>
<mandatory>Y</mandatory>
<custom-pattern type=""></custom-pattern>
</field>
<field >
<field-type></field-type>
<srv-field>taChrgOffMsg.taChrgOffCrit.Acct.foracid</srv-field>
<ui-field>acctId</ui-field>
<label>FLT000265</label>
<mandatory>Y</mandatory>
<custom-pattern type=""></custom-pattern>
</field>
<field>
<srv-field>taChrgOffMsg.taChrgOffCrit.chargeOffType</srv-field>
<ui-field>chargeOffMode</ui-field>
<label>FLT004530</label>
<mandatory>Y</mandatory>
</field>
</page>
</page-details>
</group>
</menu>
</menu-details>
Объект Java :
package com.ui.mig.menuvo;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
import javax.xml.bind.annotation.XmlValue;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"menu"
})
@XmlRootElement(name = "menu-details")
public class MenuDetails {
protected List<MenuDetails.Menu> menu;
public List<MenuDetails.Menu> getMenu() {
if (menu == null) {
menu = new ArrayList<MenuDetails.Menu>();
}
return this.menu;
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"group"
})
public static class Menu {
protected List<MenuDetails.Menu.Group> group;
@XmlAttribute(name = "name", namespace = "http://www..com/migration/")
protected String name;
public List<MenuDetails.Menu.Group> getGroup() {
if (group == null) {
group = new ArrayList<MenuDetails.Menu.Group>();
}
return this.group;
}
public String getName() {
return name;
}
public void setName(String value) {
this.name = value;
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"pageDetails"
})
public static class Group {
@XmlElement(name = "page-details", required = true)
protected MenuDetails.Menu.Group.PageDetails pageDetails;
@XmlAttribute(name = "name", namespace = "http://www..com/migration/")
protected String name;
@XmlAttribute(name = "type", namespace = "http://www./migration/")
protected String type;
public MenuDetails.Menu.Group.PageDetails getPageDetails() {
return pageDetails;
}
public void setPageDetails(MenuDetails.Menu.Group.PageDetails value) {
this.pageDetails = value;
}
public String getName() {
return name;
}
public void setName(String value) {
this.name = value;
}
public String getType() {
return type;
}
public void setType(String value) {
this.type = value;
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"page"
})
public static class PageDetails {
protected List<MenuDetails.Menu.Group.PageDetails.Page> page;
public List<MenuDetails.Menu.Group.PageDetails.Page> getPage() {
if (page == null) {
page = new ArrayList<MenuDetails.Menu.Group.PageDetails.Page>();
}
return this.page;
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"pageName",
"field"
})
public static class Page {
@XmlElement(name = "page-name", required = true)
protected String pageName;
protected List<MenuDetails.Menu.Group.PageDetails.Page.Field> field;
public String getPageName() {
return pageName;
}
public void setPageName(String value) {
this.pageName = value;
}
public List<MenuDetails.Menu.Group.PageDetails.Page.Field> getField() {
if (field == null) {
field = new ArrayList<MenuDetails.Menu.Group.PageDetails.Page.Field>();
}
return this.field;
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"fieldType",
"srvField",
"uiField",
"label",
"mandatory",
"customPattern"
})
public static class Field {
@XmlElement(name = "field-type", required = true)
protected String fieldType;
@XmlElement(name = "srv-field", required = true)
protected String srvField;
@XmlElement(name = "ui-field", required = true)
protected String uiField;
@XmlElement(required = true)
protected String label;
@XmlElement(required = true)
protected String mandatory;
@XmlElement(name = "custom-pattern", required = true)
protected MenuDetails.Menu.Group.PageDetails.Page.Field.CustomPattern customPattern;
public String getFieldType() {
return fieldType;
}
public void setFieldType(String value) {
this.fieldType = value;
}
public String getSrvField() {
return srvField;
}
public void setSrvField(String value) {
this.srvField = value;
}
public String getUiField() {
return uiField;
}
public void setUiField(String value) {
this.uiField = value;
}
public String getLabel() {
return label;
}
public void setLabel(String value) {
this.label = value;
}
public String getMandatory() {
return mandatory;
}
public void setMandatory(String value) {
this.mandatory = value;
}
public MenuDetails.Menu.Group.PageDetails.Page.Field.CustomPattern getCustomPattern() {
return customPattern;
}
public void setCustomPattern(MenuDetails.Menu.Group.PageDetails.Page.Field.CustomPattern value) {
this.customPattern = value;
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"value"
})
public static class CustomPattern {
@XmlValue
protected String value;
@XmlAttribute(name = "type", namespace = "http://www.com/migration/")
protected String type;
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public String getType() {
return type;
}
public void setType(String value) {
this.type = value;
}
}
}
}
}
}
}
}
Комментарии:
1. Ключ = значение srv_field (множественное) = все свойства в теге <field>
Ответ №1:
Map<String,Node> map = new HashMap<String,Node>();
// or new HashMap<>();
map.put("asdf", new Node());
Чтобы получить значение:
Node n = map.get("asdf");
Вы можете сравнивать значения, получая узлы из двух карт и сравнивая их, возможно, с .equals()
.
Существуют и другие методы отображения, которые подробно описаны в документации.
Комментарии:
1. Нет необходимости переопределять
hashCode
Node
.2. Кстати, вы можете использовать оператор diamond и создать новую хэш-карту<>();
3. Спасибо за решение, я могу добавить ‘String’ и ‘Node’ в hashmap. У меня есть две хэш-карты одинаковой структуры. Хотите сравнить хэш-карты на основе «ключа (строки)» и получить атрибуты узла соответственно.