Ordenar lista de Java / Mapa de orden en el que los artículos están en un archivo XML
-
12-10-2019 - |
Pregunta
Lo que estoy buscando que hacer es sorta una lista de Java o mapa en el orden de los artículos están en un archivo XML.
Por ejemplo
Tengo una lista de nombres de funciones como tal:
- functionOne
- functionThree
- functionTwo
Las miradas de archivos XML como este:
<xml>
<function>functionOne</function>
<function>functionTwo</function>
<function>functionThree</function>
</xml>
Así que me gustaría para ordenar la lista por lo que los nombres de las funciones son tan así:
- functionOne
- functionTwo
- functionThree
Ahora estoy tratando de hacer esto para las variables, así, por lo que hay alrededor de 500 artículos '' únicos.
¿Alguien tiene alguna idea de cómo puedo ir haciendo esto? Ahora para el archivo que determina que un orden no tiene que ser XML es justo lo que más uso, que puede ser cualquier cosa que puede hacer el trabajo.
Gracias de antemano por su tiempo.
Solución
En primer lugar, analizar el archivo XML para construir un Map<String,Integer>
que mapea los nombres a su posición ordinal.
A continuación, se necesita un comparador personalizado:
public class XMLComparator implements Comparator<String> {
private Map<String,Integer> order;
public XMLComparator(Map<String,Integer> desiredOrder) {
order = desiredOrder;
}
public void compare(String s1, String s2) {
return order.get(s1) - order.get(s2);
}
}
A continuación, se aplica a la lista de nombres de variables:
Collections.sort(variableNames, new XMLComparator(previouslyCreatedMap));
Probablemente hay algunos casos extremos a cuidar, pero esa es la idea general.
Otros consejos
Yo sólo sería utilizar un analizador XML para leer los valores del archivo XML en un List
fin en lugar de tomar un List
diferente y clasificarlos de acuerdo con el orden en que se encuentran en el archivo XML. Esto es suponiendo que el List
que estamos hablando de clasificación contendría todos los valores que se encuentran en el archivo XML.
Si sólo puede contener un subconjunto de los valores en el archivo XML, una opción sería la de primera lectura en todos los valores del XML y luego usar guayaba 's Ordering.explicit (Lista) :
Ordering<String> orderFromXml = Ordering.explicit(readListFromXml());
List<String> otherList = ...
Collections.sort(otherList, orderFromXml);