public class MutableList<T> implements List<T> {
private Object[] elements;
private int size;
public MutableList() {
this.elements = new Object[10];
this.size = 0;
}
public boolean add(T element) {
ensureCapacity(size + 1);
elements[size++] = element;
return true;
}
public T remove(int index) {
T oldElement = (T) elements[index];
int numMoved = size - index - 1;
if (numMoved > 0) {
System.arraycopy(elements, index + 1, elements, index, numMoved);
}
elements[--size] = null;
return oldElement;
}
public T set(int index, T element) {
T oldElement = (T) elements[index];
elements[index] = element;
return oldElement;
}
public void forEach(Consumer<? super T> action) {
for (int i = 0; i < size; i++) {
action.accept((T) elements[i]);
}
}
}
public interface Collection<T> {
// ...
default Collection<T> filter(Predicate<? super T> predicate) {
MutableList<T> result = new MutableList<>();
for (T element : this) {
if (predicate.test(element)) {
result.add(element);
}
}
return result;
}
// ...
}
<dependency>
<groupId>org.eclipse.collections</groupId>
<artifactId>eclipse-collections-api</artifactId>
<version>xxx</version>
</dependency>