【问题标题】:How to get the last List of a JAVA class如何获取 JAVA 类的最后一个列表
【发布时间】:2013-01-28 13:38:00
【问题描述】:

我正在尝试创建一个具有 ArrayList 的类。 例如:

public class SubCategory {
    protected String nameOfCategory;
    @XmlElement(required = true)
    protected String link;
    @XmlElementRef
    protected List<SubCategory> supCategory;...
}

如何获取子类别的最后一个列表?我将 JAXB 用于 xml 文件,xsd 文件如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://www.example.org/CategoriesTree" xmlns="http://www.example.org/CategoriesTree"
    elementFormDefault="qualified">

    <xs:element name="Categories">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="mainCategory" type="subCategory" minOccurs="0" maxOccurs="unbounded" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:complexType name="subCategory">
        <xs:sequence>
            <xs:element name="nameOfCategory" type="xs:string"/>
            <xs:element name="link" type="xs:string"/>
            <xs:element name="subCategory" type="subCategory" maxOccurs="unbounded"
                minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>
</xs:schema>

是的,我有这种方法,但我必须转到树中的最后一个元素,例如: 如何获取最后一个元素?

<code>
<subCategory>
  <nameOfCategory>Ordnungsmittel / Ablagemittel</nameOfCategory>
  <link>link=Ordnungsmittel / Ablagemittel</link>
  <subCategory>
    <nameOfCategory>Ordnungsmittel / Ablagemittel</nameOfCategory>
    <link>link=Ordnungsmittel / Ablagemittel</link>
    <subCategory>
       <nameOfCategory>Last</nameOfCategory>
        <link>link=Last</link>
    </subCategory>
   </subCategory>
</subCategory>
</code>

【问题讨论】:

  • “如何获得子类别的最后一个列表?” - 我不知道你在问什么。请改写问题,以便我们理解。
  • 我认为 OP 是在询问他是否可以在一个类中列出一个包含该类本身作为泛型的列表(如果这有意义的话)。

标签: java xml jaxb xsd


【解决方案1】:

我不太确定你想要完成什么。我从我的一个项目中抓取了一个生成的类,并像您在 XSD 中发布的那样定义了一个列表,将在 Java 类中像这样创建:

@XmlElement(required = true)
protected List<Manager> manager;

public List<Manager> getManager() {
    if (manager == null) {
        manager = new ArrayList<Manager>();
    }
    return this.manager;
}

如果你想在列表中添加一些东西,你还必须使用 get 方法来获取引用。

【讨论】:

    【解决方案2】:

    如何获取子类别的最后一个列表?

    由于您有一棵树,其中每个节点都属于同一类型 (SubCategory),因此您可以编写一个递归函数,将 SubCategory 的实例作为参数向下导航到最后一个叶子并返回 int。

    【讨论】:

    • 是的,但我担心记忆,我必须使用迭代,这会比递归更难
    【解决方案3】:

    没有“最后一个列表”,因为同一级别可以有多个元素! 要检索您最后标记的那个,您需要一个递归循环,或者您可以更好地对其建模!

    【讨论】:

      【解决方案4】:

      好的,我做到了 :) 感谢您的回复。

      public void showTree(List<SubCategory> child){
      
              for(int i=child.size()-1; i>=0; i--){
                  if(!child.get(i).getSupCategory().isEmpty()){
                      System.out.println(child.get(i).getNameOfCategory());
                      showTree(child.get(i).getSupCategory());
                  }
                  else{
                      System.out.println(child.get(i).getNameOfCategory());
                      //child.remove(i);
      
                  }
              }
      

      【讨论】:

        猜你喜欢
        • 2011-12-14
        • 2010-10-30
        • 2022-11-15
        • 2013-12-02
        • 1970-01-01
        • 2018-08-25
        • 1970-01-01
        • 2021-08-10
        • 2018-02-01
        相关资源
        最近更新 更多