Java 使用JAXB进行排序解组
假设我有一个XML:Java 使用JAXB进行排序解组,java,jaxb,Java,Jaxb,假设我有一个XML: <root> <node> <order-id>4</order-id> ..... </node> <node> <order-id>1</order-id> .... </node> </root> 4. ..... 1. .... 当我解组这个xml时,我希望我得到的列表
<root>
<node>
<order-id>4</order-id>
.....
</node>
<node>
<order-id>1</order-id>
....
</node>
</root>
4.
.....
1.
....
当我解组这个xml时,我希望我得到的列表
用顺序id
值进行排序
有没有一种使用JAXB直接获取排序列表的方法?如果您不介意设置而不是列表,请尝试
@XmlRootElement(name="node")
class Node implements Comparable<Node> {
@XmlElement(name="order-id")
int orderId;
@Override
public int compareTo(Node n) {
return orderId - n.orderId;
}
}
@XmlRootElement(name="root")
class Root {
@XmlElement(name="node")
Set<Node> nodes = new TreeSet<>();
}
@XmlRootElement(name=“node”)
类节点实现了可比较的{
@XmlElement(name=“订单id”)
int-orderId;
@凌驾
公共整数比较(节点n){
return orderId-n.orderId;
}
}
@XmlRootElement(name=“root”)
类根{
@xmlement(name=“node”)
设置节点=新树集();
}
很好。如果Set不是一个选项,那么将Root更改为
@XmlRootElement(name="root")
class Root {
List<Node> nodes;
@XmlElement(name="node")
public void setNodes(Node[] nodes) {
Arrays.sort(nodes);
this.nodes = Arrays.asList(nodes);
}
}
@XmlRootElement(name=“root”)
类根{
列出节点;
@xmlement(name=“node”)
公共void集合节点(节点[]节点){
数组。排序(节点);
this.nodes=Arrays.asList(节点);
}
}
谢谢,我想试试这个。还有一个名为TreeList的ApacheCommons集合,也许它也能在不丢失列表实现的情况下为我工作。我不认为这是JAXB的责任,是吗?我的意思是,如果不依赖基础集合,就没有办法做到这一点。@EvgeniyDorofeev:我同意你的第一个解决方案。在这种情况下,Set更有意义,因为在ID上进行排序。第二个选项(Arrays.sort…)使我的日子:D+1