6

我有一个字符串迭代器。

对于排序,我需要从中创建一个列表并使用Collections.sort(list).

有没有简单的方法来对迭代器进行排序。

4

3 回答 3

16

Iterator 不是容器,它是用于遍历容器元素的实用程序。因此,如果您只能访问迭代器,则无法更改由该迭代器的创建者定义的迭代顺序。

如果您无法更改原始容器,则必须将迭代器传递的元素收集到一个新的 Collection 中并在其中对它们进行排序。

(了解迭代器可能实现的一个好方法是查看 JDK 类的源代码或实现自己的迭代器)

于 2013-05-08T07:37:28.260 回答
7

实际上你不能,因为迭代器不是一个集合。

如果很明显,你可以做

public static Iterator sortedIterator(Iterator it, Comparator comparator) {
      List list = new ArrayList();
      while (it.hasNext()) {
          list.add(it.next());
      }

      Collections.sort(list, comparator);
      return list.iterator();
  }
}
于 2013-05-08T07:01:52.317 回答
-2

使用 TreeSet 或 TreeMap。它们是已经排序的集合。

于 2013-05-08T07:01:54.237 回答