1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 package org.neo4j.examples.socnet;
23
24 import org.neo4j.helpers.collection.PositionedIterator;
25
26 import java.util.*;
27
28 class FriendsStatusUpdateIterator implements Iterator<StatusUpdate> {
29 private ArrayList<PositionedIterator<StatusUpdate>> statuses = new ArrayList<PositionedIterator<StatusUpdate>>();
30 private StatusUpdateComparator comparator = new StatusUpdateComparator();
31
32 public FriendsStatusUpdateIterator( Person person )
33 {
34 for ( Person friend : person.getFriends() )
35 {
36 Iterator<StatusUpdate> iterator = friend.getStatus().iterator();
37 if (iterator.hasNext()) {
38 statuses.add(new PositionedIterator<StatusUpdate>(iterator));
39 }
40 }
41
42 sort();
43 }
44
45 public boolean hasNext()
46 {
47 return statuses.size() > 0;
48 }
49
50 public StatusUpdate next()
51 {
52 if ( statuses.size() == 0 )
53 {
54 throw new NoSuchElementException();
55 }
56
57 PositionedIterator<StatusUpdate> first = statuses.get(0);
58 StatusUpdate returnVal = first.current();
59
60 if ( !first.hasNext() )
61 {
62 statuses.remove( 0 );
63 }
64 else
65 {
66 first.next();
67 sort();
68 }
69
70 return returnVal;
71
72 }
73
74 private void sort()
75 {
76 Collections.sort( statuses, comparator );
77 }
78
79 public void remove()
80 {
81 throw new UnsupportedOperationException( "Don't know how to do that..." );
82 }
83
84 private class StatusUpdateComparator implements Comparator<PositionedIterator<StatusUpdate>> {
85 public int compare(PositionedIterator<StatusUpdate> a, PositionedIterator<StatusUpdate> b) {
86 return a.current().getDate().compareTo(b.current().getDate());
87 }
88 }
89 }