Java Stream How to - Extend java.util.Collection with default method








Question

We would like to know how to extend java.util.Collection with default method.

Answer

//from   ww  w . j a v a 2  s  .c  om
import java.util.ArrayList;
import java.util.Collection;
import java.util.function.Consumer;
import java.util.function.Predicate;

public class Main {

  public static void main(String[] args) {
    Collection2<Integer> numbers = new MyCollection2Impl<>();
    numbers.add(2);
    numbers.add(3);
    numbers.add(5);
    numbers.add(7);
    numbers.add(9);
    numbers.forEachIf(System.out::println, i -> i > 5);
  }

}

class MyCollection2Impl<T> extends ArrayList<T> implements Collection2<T> {

  private static final long serialVersionUID = -1202005142690509313L;

}

interface Collection2<T> extends Collection<T> {
  default void forEachIf(Consumer<T> action, Predicate<T> filter) {
    this.stream().filter(filter).forEach(action);
  }
}

The code above generates the following result.