01: /**
02: *
03: */package prefuse.data.util;
04:
05: import java.util.ArrayList;
06: import java.util.Collections;
07: import java.util.Comparator;
08: import java.util.Iterator;
09:
10: import prefuse.data.Tuple;
11:
12: /**
13: * Iterator that provides a sorted iteration over a set of tuples.
14: * @author <a href="http://jheer.org">jeffrey heer</a>
15: */
16: public class SortedTupleIterator implements Iterator {
17:
18: private ArrayList m_tuples;
19: private Comparator m_cmp;
20: private Iterator m_iter;
21:
22: /**
23: * Create a new SortedTupleIterator that sorts tuples in the given
24: * iterator using the given comparator.
25: * @param iter the source iterator of tuples
26: * @param c the comparator to use for sorting
27: */
28: public SortedTupleIterator(Iterator iter, Comparator c) {
29: this (iter, 128, c);
30: }
31:
32: /**
33: * Create a new SortedTupleIterator that sorts tuples in the given
34: * iterator using the given comparator.
35: * @param iter the source iterator of tuples
36: * @param size the expected number of tuples in the iterator
37: * @param c the comparator to use for sorting
38: */
39: public SortedTupleIterator(Iterator iter, int size, Comparator c) {
40: m_tuples = new ArrayList(size);
41: init(iter, c);
42: }
43:
44: /**
45: * Initialize this iterator for the given source iterator and
46: * comparator.
47: * @param iter the source iterator of tuples
48: * @param c the comparator to use for sorting
49: */
50: public void init(Iterator iter, Comparator c) {
51: m_tuples.clear();
52: m_cmp = c;
53:
54: // populate tuple list
55: while (iter.hasNext()) {
56: Tuple t = (Tuple) iter.next();
57: m_tuples.add(t);
58: }
59: // sort tuple list
60: Collections.sort(m_tuples, m_cmp);
61: // create sorted iterator
62: m_iter = m_tuples.iterator();
63: }
64:
65: /**
66: * @see java.util.Iterator#hasNext()
67: */
68: public boolean hasNext() {
69: return m_iter.hasNext();
70: }
71:
72: /**
73: * @see java.util.Iterator#next()
74: */
75: public Object next() {
76: return m_iter.next();
77: }
78:
79: /**
80: * Throws an UnsupportedOperationException
81: * @see java.util.Iterator#remove()
82: * @throws UnsupportedOperationException
83: */
84: public void remove() {
85: throw new UnsupportedOperationException();
86: }
87:
88: } // end of class SortedTupleIterator
|