import fj.F;
import fj.data.Option;
import static fj.data.Option.none;
import static fj.data.Option.some;
import static fj.pre.Show.intShow;
import static fj.pre.Show.optionShow;

public final class Option_filter {
  public static void main(final String[] args) {
    final Option<Integer> o1 = some(7);
    final Option<Integer> o2 = none();
    final Option<Integer> o3 = some(8);
    final Option<Integer> p1 = o1.filter(new F<Integer, Boolean>() {
      public Boolean f(final Integer i) {
        return i % 2 == 0;
      }
    });
    final Option<Integer> p2 = o2.filter(new F<Integer, Boolean>() {
      public Boolean f(final Integer i) {
        return i % 2 == 0;
      }
    });
    final Option<Integer> p3 = o3.filter(new F<Integer, Boolean>() {
      public Boolean f(final Integer i) {
        return i % 2 == 0;
      }
    });
    optionShow(intShow).println(p1); // None
    optionShow(intShow).println(p2); // None
    optionShow(intShow).println(p3); // Some(8)
  }
}
