Сортировать список / карту Java по порядку, в котором элементы находятся в файле XML - PullRequest
2 голосов
/ 23 декабря 2010

Я хочу отсортировать список или карту Java в порядке, в котором элементы находятся в файле XML.

Например,

У меня есть список имен функций.так:

  1. functionOne
  2. functionThree
  3. functionTwo

Файл XML выглядит следующим образом:

<xml>
  <function>functionOne</function>
  <function>functionTwo</function>
  <function>functionThree</function>
</xml>

Итак, я хотел бы отсортировать список так, чтобы имена функций были такими:

  1. functionOne
  2. functionTwo
  3. functionThree

Теперь я пытаюсь сделать это и для переменных, так что есть около 500+ уникальных «предметов».

Кто-нибудь знает, как я могу это сделать?Теперь для файла, который определяет, что порядок сортировки не должен быть XML, это то, что я использую чаще всего, это может быть что угодно, что может сделать работу.

Заранее спасибо за ваше время.

Ответы [ 2 ]

1 голос
/ 23 декабря 2010

Сначала проанализируйте файл XML, чтобы построить Map<String,Integer>, который сопоставляет имена с их порядковым положением.

Затем вам нужен специальный компаратор:

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);
    }

}

, а затем примените егок вашему списку имен переменных:

Collections.sort(variableNames, new XMLComparator(previouslyCreatedMap));

Возможно, есть некоторые крайние случаи, о которых нужно позаботиться, но это общая идея.

0 голосов
/ 23 декабря 2010

Я бы просто использовал синтаксический анализатор XML для чтения значений из файла XML в List по порядку, вместо того, чтобы взять другой List и отсортировать его в соответствии с порядком, который они нашли в файле XML. Это предполагает, что List, о котором вы говорите, будет содержать все значения, найденные в файле XML.

Если он может содержать только подмножество значений в файле XML, одним из вариантов будет сначала прочитать все значения из XML, а затем использовать Guava '* Ordering.explicit (Список)

Ordering<String> orderFromXml = Ordering.explicit(readListFromXml());
List<String> otherList = ...
Collections.sort(otherList, orderFromXml);
...