1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 package org.opencastproject.util;
23
24 import java.util.ArrayList;
25 import java.util.Collection;
26 import java.util.Iterator;
27 import java.util.LinkedHashMap;
28 import java.util.List;
29 import java.util.Map;
30 import java.util.Map.Entry;
31
32
33
34
35 public class SmartIterator<A> {
36 private int limit;
37 private int offset;
38 private Iterator<?> iterator;
39
40 public SmartIterator(int limit, int offset) {
41 this.limit = limit;
42 this.offset = offset;
43 }
44
45
46
47
48
49
50
51
52 public Map<String, A> applyLimitAndOffset(Map<String, A> map) {
53 iterator = map.entrySet().iterator();
54
55 Map<String, A> filteredMap = new LinkedHashMap<String, A>();
56 int i = 0;
57 while (isRecordRequired(filteredMap.size())) {
58 Entry<String, A> item = (Entry<String, A>) iterator.next();
59 if (i++ >= offset) {
60 filteredMap.put(item.getKey(), item.getValue());
61 }
62 }
63 return filteredMap;
64 }
65
66 private boolean isRecordRequired(int filteredMapSize) {
67 return (filteredMapSize < limit || limit == 0) && iterator.hasNext();
68 }
69
70
71
72
73
74
75
76
77 public List<A> applyLimitAndOffset(Collection<A> unfilteredCollection) {
78 iterator = unfilteredCollection.iterator();
79 List<A> filteredList = new ArrayList<A>();
80 int i = 0;
81 while (isRecordRequired(filteredList.size())) {
82 A nextItem = (A) iterator.next();
83 if (i++ >= offset) {
84 filteredList.add(nextItem);
85 }
86 }
87 return filteredList;
88 }
89 }