1 package sharin.unlinq; 2 3 import java.util.Comparator; 4 import java.util.List; 5 import java.util.Map; 6 7 public interface Enumerable<T> extends Iterable<T> { 8 9 public T aggregate(Func2<T, T, T> func); 10 11 public <A> A aggregate(A seed, Func2<A, T, A> func); 12 13 public <A, R> R aggregate(A seed, Func2<A, T, A> func, 14 Func<A, R> resultSelector); 15 16 public Boolean all(Func<T, Boolean> predicate); 17 18 public Boolean any(); 19 20 public Boolean any(Func<T, Boolean> predicate); 21 22 public double average(); 23 24 public double averageLong(); 25 26 public float averageFloat(); 27 28 public double averageDouble(); 29 30 public double average(Func<T, Integer> selector); 31 32 public double averageLong(Func<T, Long> selector); 33 34 public float averageFloat(Func<T, Float> selector); 35 36 public double averageDouble(Func<T, Double> selector); 37 38 public <R> Enumerable<R> cast(Class<R> resultClass); 39 40 public Enumerable<T> concat(Enumerable<T> second); 41 42 public boolean contains(Object o); 43 44 public int count(); 45 46 public int count(Func<T, Boolean> predicate); 47 48 public Enumerable<T> defaultIfEmpty(); 49 50 public Enumerable<T> defaultIfEmpty(T defaultValue); 51 52 public Enumerable<T> distinct(); 53 54 public T elementAt(int index); 55 56 public T elementAtOrDefault(int index); 57 58 public T elementAtOrDefault(int index, T defaultValue); 59 60 public Enumerable<T> except(Enumerable<T> second); 61 62 public T first(); 63 64 public T first(Func<T, Boolean> predicate); 65 66 public T firstOrDefault(); 67 68 public T firstOrDefault(T defaultValue); 69 70 public T firstOrDefault(Func<T, Boolean> predicate); 71 72 public T firstOrDefault(Func<T, Boolean> predicate, T defaultValue); 73 74 public <K> Enumerable<Grouping<K, T>> groupBy(Func<T, K> keySelector); 75 76 public <K, R> Enumerable<R> groupBy(Func<T, K> keySelector, 77 Func2<K, Enumerable<T>, R> resultSelector); 78 79 public <K, E> Enumerable<Grouping<K, E>> groupBy(Func<T, K> keySelector, 80 Func<T, E> elementSelector); 81 82 public <K, E, R> Enumerable<R> groupBy(Func<T, K> keySelector, 83 Func<T, E> elementSelector, 84 Func2<K, Enumerable<E>, R> resultSelector); 85 86 public <I, K, R> Enumerable<R> groupJoin(Enumerable<I> inner, 87 Func<T, K> outerKeySelector, Func<I, K> innerKeySelector, 88 Func2<T, Enumerable<I>, R> resultSelector); 89 90 public Enumerable<T> intersect(Enumerable<T> second); 91 92 public <I, K, R> Enumerable<R> join(Enumerable<I> inner, 93 Func<T, K> outerKeySelector, Func<I, K> innerKeySelector, 94 Func2<T, I, R> resultSelector); 95 96 public T last(); 97 98 public T last(Func<T, Boolean> predicate); 99 100 public T lastOrDefault(); 101 102 public T lastOrDefault(T defaultValue); 103 104 public T lastOrDefault(Func<T, Boolean> predicate); 105 106 public T lastOrDefault(Func<T, Boolean> predicate, T defaultValue); 107 108 public long longCount(); 109 110 public long longCount(Func<T, Boolean> predicate); 111 112 public T max(); 113 114 public <R extends Comparable<R>> R max(Func<T, R> selector); 115 116 public T min(); 117 118 public <R extends Comparable<R>> R min(Func<T, R> selector); 119 120 public <R> Enumerable<R> ofType(Class<R> resultClass); 121 122 public <K> OrderedEnumerable<T> orderBy(Func<T, K> keySelector); 123 124 public <K> OrderedEnumerable<T> orderBy(Func<T, K> keySelector, 125 Comparator<K> comparator); 126 127 public <K> OrderedEnumerable<T> orderByDescending(Func<T, K> keySelector); 128 129 public <K> OrderedEnumerable<T> orderByDescending(Func<T, K> keySelector, 130 Comparator<K> comparator); 131 132 public Enumerable<T> reverse(); 133 134 public <R> Enumerable<R> select(Func2<T, Integer, R> selector); 135 136 public <R> Enumerable<R> select(Func<T, R> selector); 137 138 public <R> Enumerable<R> selectMany(Func<T, Enumerable<R>> selector); 139 140 public <R> Enumerable<R> selectMany( 141 Func2<T, Integer, Enumerable<R>> selector); 142 143 public <C, R> Enumerable<R> selectMany( 144 Func<T, Enumerable<C>> collectionSelector, 145 Func2<T, C, R> resultSelector); 146 147 public <C, R> Enumerable<R> selectMany( 148 Func2<T, Integer, Enumerable<C>> collectionSelector, 149 Func2<T, C, R> resultSelector); 150 151 public Boolean sequenceEqual(Enumerable<T> second); 152 153 public T single(); 154 155 public T single(Func<T, Boolean> predicate); 156 157 public T singleOrDefault(); 158 159 public T singleOrDefault(T defaultValue); 160 161 public T singleOrDefault(Func<T, Boolean> predicate); 162 163 public T singleOrDefault(Func<T, Boolean> predicate, T defaultValue); 164 165 public Enumerable<T> skip(int count); 166 167 public Enumerable<T> skipWhile(Func<T, Boolean> predicate); 168 169 public Enumerable<T> skipWhile(Func2<T, Integer, Boolean> predicate); 170 171 public int sum(); 172 173 public long sumLong(); 174 175 public float sumFloat(); 176 177 public double sumDouble(); 178 179 public int sum(Func<T, Integer> selector); 180 181 public long sumLong(Func<T, Long> selector); 182 183 public float sumFloat(Func<T, Float> selector); 184 185 public double sumDouble(Func<T, Double> selector); 186 187 public Enumerable<T> take(int count); 188 189 public Enumerable<T> takeWhile(Func<T, Boolean> predicate); 190 191 public Enumerable<T> takeWhile(Func2<T, Integer, Boolean> predicate); 192 193 public Object[] toArray(); 194 195 public <R> R[] toArray(Class<R> resultClass); 196 197 public <K> Map<K, T> toMap(Func<T, K> keySelector); 198 199 public <K, E> Map<K, E> toMap(Func<T, K> keySelector, 200 Func<T, E> elementSelector); 201 202 public <K> Dictionary<K, T> toDictionary(Func<T, K> keySelector); 203 204 public <K, E> Dictionary<K, E> toDictionary(Func<T, K> keySelector, 205 Func<T, E> elementSelector); 206 207 public List<T> toList(); 208 209 public EnumerableList<T> toEnumerableList(); 210 211 public <K> Map<K, List<T>> toListMap(Func<T, K> keySelector); 212 213 public <K, E> Map<K, List<E>> toListMap(Func<T, K> keySelector, 214 Func<T, E> elementSelector); 215 216 public <K> Lookup<K, T> toLookup(Func<T, K> keySelector); 217 218 public <K, E> Lookup<K, E> toLookup(Func<T, K> keySelector, 219 Func<T, E> elementSelector); 220 221 public Enumerable<T> union(Enumerable<T> second); 222 223 public Enumerable<T> where(Func<T, Boolean> predicate); 224 225 public Enumerable<T> where(Func2<T, Integer, Boolean> predicate); 226 }