独自の java.util.stream 実現を作成した小さなコードがあります。
PECS ルールを使用してパラメータ化する必要があります。しかし、私は PECS ルールをよく理解していなかったか、私のクラスのデザインが悪かったかのどちらかです - 私はそれを正しく実装する方法を知りません。
たとえば、filter() メソッドの実現で (? extends T) を実装しようとすると、foreach サイクルを使用できません。
多分あなたはいくつかのアイデアを持っていますか?前もって感謝します。
public class Streams<T> {
private final List<T> list;
private List<T> resultList = new ArrayList<>();
private Streams(List<T> list) {
this.list = list;
}
public static <E> Streams<E> of(List<E> list) {
return new Streams<>(list);
}
public Streams<T> filter(Predicate<T> predicate) {
for (T elem : list) {
if (predicate.test(elem)) {
resultList.add(elem);
}
}
return this;
}
public Streams<T> transform(Function<? super T, ? extends T> function) {
for (T elem : resultList) {
resultList.set(resultList.indexOf(elem), function.apply(elem));
}
return this;
}
public <E, I> Map<E, I> toMap(Function<T, E> function1, Function<T, I> function2) {
HashMap<E, I> map = new HashMap<>();
for (T elem : resultList) {
map.put(function1.apply(elem), function2.apply(elem));
}
return map;
}
}