Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Comparator排序时,内容已存在父级_Java_Comparator_Jdom 2 - Fatal编程技术网

Java 使用Comparator排序时,内容已存在父级

Java 使用Comparator排序时,内容已存在父级,java,comparator,jdom-2,Java,Comparator,Jdom 2,我使用jdom2从xml字符串中获取元素列表。 并希望按getChildText对其进行排序 这是我的比较: public class ComparatorFunc implements Comparator { public int compare(Object arg0, Object arg1) { Element e1 = (Element) arg0; Element e2 = (Element) arg1; int flag

我使用jdom2从xml字符串中获取元素列表。 并希望按getChildText对其进行排序

这是我的比较:

public class ComparatorFunc implements Comparator {
    public int compare(Object arg0, Object arg1) {
        Element e1 = (Element) arg0;
        Element e2 = (Element) arg1;

        int flag = e1.getChildText("EntType").compareTo(e2.getChildText("EntType"));
        return flag;
    }
}
这是我的代码:

String xmlStr = request.getParameter("xmlStr");
xmlStr = xmlStr.trim();
//System.out.println(xmlStr);

ByteArrayInputStream xmlStream = null;

try {
    xmlStream = new ByteArrayInputStream(xmlStr.getBytes("UTF-8"));
    if (xmlStream != null) {
        SAXBuilder builder = new SAXBuilder(false);
        org.jdom2.Document document = builder.build(xmlStream);

        Element root = document.getRootElement();

        List<Element> listItem = root.getChildren("item");
        ComparatorFunc comparator = new ComparatorFunc();
        Collections.sort(listItem, comparator);

        .....

那么我该怎么做呢?

JDOM要求内容始终有效。这包括排序过程中的中间结果

Java中的本机排序方法交换内容时,首先在新位置“设置”内容,然后再从旧位置“删除”内容,从而创建一个副本

这是一个已知的问题

解决办法是使用“正确”的方法

如果需要,您还可以排序内容,或排序致敬

作为旁注,请考虑以下输入:

org.jdom2.Document document = builder.build(new StringReader(xmlStr));

你从哪里得到这个例外?排序前创建新列表是否有帮助?@qqilihq此行是Collections.sortlistItem,comparator;然后在创建列表之前尝试创建一个副本。
org.jdom2.Document document = builder.build(new StringReader(xmlStr));