2

我要做的是按照项目在 XML 文件中的顺序对 Java List 或 Map 进行排序。

例如

我有一个函数名称列表,如下所示:

  1. 功能一
  2. 功能三
  3. 功能二

XML 文件如下所示:

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

所以我想对列表进行排序,以便函数名称如下:

  1. 功能一
  2. 功能二
  3. 功能三

现在我也尝试对变量执行此操作,因此大约有 500 多个独特的“项目”。

有谁知道我该怎么做?现在对于确定排序顺序的文件不必是 XML,它只是我最常使用的文件,它可以是任何可以完成工作的文件。

在此先感谢您的时间。

4

2 回答 2

1

首先,解析 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));

可能有一些边缘情况需要处理,但这是一般的想法。

于 2010-12-23T00:54:46.267 回答
0

我将只使用 XML 解析器将 XML 文件中的值List按顺序读取,而不是采用不同的值List并根据它们在 XML 文件中找到的顺序对其进行排序。这是假设List您正在谈论的排序将包含在 XML 文件中找到的所有值。

如果它可能只包含 XML 文件中值的子集,则一种选择是首先从 XML 中读取所有值,然后使用GuavaOrdering.explicit(List)

Ordering<String> orderFromXml = Ordering.explicit(readListFromXml());
List<String> otherList = ...
Collections.sort(otherList, orderFromXml);
于 2010-12-23T01:27:51.340 回答