package ssj.algorithm;
import com.google.common.base.Preconditions;
import ssj.algorithm.collections.HashSet;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Objects;
/**
* Created by shenshijun on 15/2/1.
*/
public interface List extends Collection {
public T get(int index);
public void set(int index, T ele);
public void remove(int index);
public default void delete(T ele) {
Preconditions.checkNotNull(ele);
for (Iterator iterator = iterator(); iterator.hasNext(); ) {
if (Objects.equals(iterator.next(), ele)) {
iterator.remove();
}
}
}
/**
* å»é¤å表ä¸éå¤çå
ç´
*
* @return
*/
public default int removeDuplicate() {
int result = 0;
HashSet set = new HashSet<>(100);
for (Iterator iterator = iterator(); iterator.hasNext(); ) {
if (set.contains(iterator.next())) {
iterator.remove();
result++;
}
}
return result;
}
public default T getReverse(int index) {
int normal_index = size() - index - 1;
Preconditions.checkPositionIndex(normal_index, size());
return get(normal_index);
}
List partition(T par_ele, Comparator super T> comparator);
public default Set chainEle() {
HashSet result = new HashSet<>();
HashMap count_eles = new HashMap<>();
for (T ele : this) {
if (count_eles.get(ele) == null) {
count_eles.put(ele, 0);
}
count_eles.put(ele, count_eles.get(ele));
}
count_eles.entrySet().stream().filter(count -> count.getValue().compareTo(2) >= 0).forEach(count -> {
result.add(count.getKey());
});
return result;
}
Iterator reverse();
public default boolean isPalindromic() {
Iterator default_iterator = iterator();
Iterator reversed_iterator = reverse();
while (default_iterator.hasNext() && reversed_iterator.hasNext()) {
if (!default_iterator.next().equals(reversed_iterator.next())) {
return false;
}
}
return true;
}
}