PECS параметризованный класс

У меня есть небольшой фрагмент кода, где я создал свою собственную реализацию java.util.stream.

Мне нужно параметризовать его с помощью правила PECS. Но либо я плохо понимал правило PECS, либо мой класс плохо спроектирован - я не знаю, как правильно его реализовать.

Например, когда я пытаюсь реализовать его (? Extends T) в реализации метода filter() - я не могу использовать цикл 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;
  }
}

0 ответов

Другие вопросы по тегам