|
2 | 2 |
|
3 | 3 | import java.util.*;
|
4 | 4 | import java.util.function.Consumer;
|
| 5 | +import java.util.function.Function; |
5 | 6 | import java.util.function.Predicate;
|
6 | 7 |
|
7 |
| -public class ArrayListCustom<T> implements Cloneable,Iterable<T> { |
| 8 | +public class ArrayListCustom<T> implements Cloneable, Iterable<T> { |
8 | 9 |
|
9 | 10 | private final int DEFAULT_CAPACITY = 7;
|
10 | 11 | private int size = 0;
|
@@ -121,12 +122,6 @@ public void forEach(Consumer<? super T> o) {
|
121 | 122 | }
|
122 | 123 | }
|
123 | 124 |
|
124 |
| - public ArrayListCustom<T> filter(Predicate<T> o) { |
125 |
| - Objects.requireNonNull((o)); |
126 |
| - ArrayListCustom<T> newList = new ArrayListCustom<>(); |
127 |
| - this.forEach(o::test); |
128 |
| - return newList; |
129 |
| - } |
130 | 125 |
|
131 | 126 | @Override
|
132 | 127 | public Iterator<T> iterator() {
|
@@ -155,4 +150,99 @@ public Object[] toArray() {
|
155 | 150 | return ret;
|
156 | 151 | }
|
157 | 152 |
|
| 153 | + |
| 154 | + // Stream API methods default support in this Arraylist |
| 155 | + public ArrayListCustom<T> filter(Predicate<T> o) { |
| 156 | + Objects.requireNonNull((o)); |
| 157 | + ArrayListCustom<T> newList = new ArrayListCustom<>(); |
| 158 | + this.forEach(item -> { |
| 159 | + if (o.test(item)) newList.add(item); |
| 160 | + }); |
| 161 | + return newList; |
| 162 | + } |
| 163 | + |
| 164 | + public <R> ArrayListCustom<R> map(Function<T, R> o) { |
| 165 | + Objects.requireNonNull((o)); |
| 166 | + ArrayListCustom<R> newList = new ArrayListCustom<>(); |
| 167 | + this.forEach(item -> { |
| 168 | + newList.add(o.apply(item)); |
| 169 | + }); |
| 170 | + return newList; |
| 171 | + } |
| 172 | + |
| 173 | + public T findFirst(Predicate<T> o) { |
| 174 | + Objects.requireNonNull(o); |
| 175 | + for (Object item : this.arr) { |
| 176 | + T t = (T) item; |
| 177 | + if (o.test(t)) return t; |
| 178 | + } |
| 179 | + return null; |
| 180 | + } |
| 181 | + |
| 182 | + public boolean allMatch(Predicate<T> o) { |
| 183 | + Objects.requireNonNull(o); |
| 184 | + for (Object item : this.arr) { |
| 185 | + T t = (T) item; |
| 186 | + if (!o.test(t)) return false; |
| 187 | + } |
| 188 | + return true; |
| 189 | + } |
| 190 | + |
| 191 | + public boolean anyMatch(Predicate<T> o) { |
| 192 | + Objects.requireNonNull(o); |
| 193 | + for (Object item : this.arr) { |
| 194 | + T t = (T) item; |
| 195 | + if (o.test(t)) return true; |
| 196 | + } |
| 197 | + return false; |
| 198 | + } |
| 199 | + |
| 200 | + public int findFirstIndex(Predicate<T> o) { |
| 201 | + Objects.requireNonNull(o); |
| 202 | + int i = 0; |
| 203 | + for (Object item : this.arr) { |
| 204 | + T t = (T) item; |
| 205 | + if (o.test(t)) return i; |
| 206 | + i++; |
| 207 | + } |
| 208 | + return -1; |
| 209 | + } |
| 210 | + |
| 211 | + public int count() { |
| 212 | + return size(); |
| 213 | + } |
| 214 | + |
| 215 | + public T max(Comparator<? super T> comparator) { |
| 216 | + Objects.requireNonNull(comparator); |
| 217 | + if (arr.length == 0) return null; |
| 218 | + T maxValue = (T) arr[0]; |
| 219 | + for (Object val : arr) { |
| 220 | + T item = (T) val; |
| 221 | + int compareValue = comparator.compare(item, maxValue); |
| 222 | + if (compareValue > 0) maxValue = item; |
| 223 | + } |
| 224 | + return maxValue; |
| 225 | + } |
| 226 | + |
| 227 | + public T min(Comparator<? super T> comparator) { |
| 228 | + Objects.requireNonNull(comparator); |
| 229 | + if (arr.length == 0) return null; |
| 230 | + T minValue = (T) arr[0]; |
| 231 | + for (Object val : arr) { |
| 232 | + T item = (T) val; |
| 233 | + int compareValue = comparator.compare(item, minValue); |
| 234 | + if (compareValue < 0) minValue = item; |
| 235 | + } |
| 236 | + return minValue; |
| 237 | + } |
| 238 | + |
| 239 | + public boolean noneMatch(Predicate<T> p) { |
| 240 | + Objects.requireNonNull(p); |
| 241 | + for (Object val : arr) { |
| 242 | + T item = (T) val; |
| 243 | + if (p.test(item)) return false; |
| 244 | + } |
| 245 | + return true; |
| 246 | + } |
| 247 | + |
158 | 248 | }
|
0 commit comments